gpt4 book ai didi

objective-c - 在 C 或 Objective-C 中获取目标文件所属的静态库名称的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:17 27 4
gpt4 key购买 nike

我正在创建一些包含 C 或 Objective-C 代码的静态库(MyLib、OtherLib),我希望每个模块都能够访问静态库的名称。

我可以做一个

const char* mylibname = "MyLib";

并在任何地方使用它。但是,我想要一种更方便的方法,每个库中的每个文件都可以通过常量 currentlibname 访问其库。因此,当一个文件在 MyLib 中时,currentlibname 的值为“MyLib”,当它在 OtherLib 中时,其值为“OtherLib”。

关于最方便的解决方案有什么想法吗?理想情况下,所有魔法都应该集中在一个地方,除了包含声明 mylibname 的内容之外,无需调整每个文件。

问候,乔臣

最佳答案

这显然取决于操作系统、编译器和构建器。

如果你在 Linux 上有动态库,你可以在运行时检索一些信息,可能是通过 /proc/self/mapsdladdr(甚至可能是return address builtins ).

我的建议是在每个库的构建过程中定义一个预处理器符号,也许在你的 Makefile 中使用类似 CFLAGS += -DTHIS_LIBRARY_NAME=MyLib 的东西,并在mylib.h 使用它的东西。对于 C,我可能建议放入 mylib.h 之类的东西

#define QUOTE_NAME(N) #N
static inline const char *this_library_name ()
{ return QUOTE_NAME(THIS_LIBRARY_NAME); }

顺便说一句,您甚至可以将上述代码放在您的库主头文件中包含的一个通用单个头文件中。

但我有点惊讶你会这么问。更好的方法可能是为你的库版本提供一个 API,看看是什么 gtk does about feature tests .

关于objective-c - 在 C 或 Objective-C 中获取目标文件所属的静态库名称的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12881363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com