【发布时间】:2017-09-25 03:01:43
【问题描述】:
我有一个旧的 .a 库,名为 BULib,在库目标的 GCC_PREPROCESSOR_DEFINITIONS 中定义了一个宏 NEW_API。此宏在 lib 中用于在标头中公开某些方法,或者不使用条件编译。例如:
#ifdef NEW_API
+ (nullable NSString *)user;
#endif
在项目中使用此库时出现问题。当我想使用时
[BULib user];
我得到一个编译时错误
选择器“getUser”没有已知的类方法
如果我在项目的GCC_PREPROCESSOR_DEFINITIONS 中添加NEW_API,问题就解决了,然后我可以使用该符号并且它按预期工作。
也许我误解了库和消费者项目之间宏的使用,但我不希望这种行为。
如果 lib 已使用宏集正确编译,为什么我必须在使用者项目中设置宏?如果这不是实现这一点的方法,那是什么?
非常感谢。
【问题讨论】:
-
你能说明引用的代码部分出现在哪个文件中吗?我怀疑您的库的 API 标头包含它们或其中的一部分。如果 lib 定义了某些函数,但标头仅在定义开关的情况下为它们提供声明......那么您需要开关。我知道 minimal reproducible example 使用 lib 并不容易,但请尝试“围绕”您的代码引号提供更多信息,类似于“M几乎C并非真的VE".
标签: ios objective-c macros c-preprocessor