2017-04-27 24 views
0

我有一个旧的.a库,其名称为BULib,库目标的GCC_PREPROCESSOR_DEFINITIONS中定义了一个宏NEW_API。这个宏在lib中用来公开头中的一些方法,或者不用条件编译。例如:在消费者项目中找不到库预处理器宏

#ifdef NEW_API 
+ (nullable NSString *)user; 
#endif 

在项目中使用此库时出现此问题。当我想用

[BULib user]; 

我得到一个编译时错误选择

没有已知的类方法“的getUser”

,如果我在GCC_PREPROCESSOR_DEFINITIONS添加NEW_API的问题就解决了的项目,然后我可以使用该符号,并按预期工作。

也许我误解了库和消费者项目之间的宏的使用,但我不希望这种行为。

为什么我必须在消费者项目中设置宏如果lib已经用宏集正确编译?如果这不是实现这一目标的方式,那它是什么?

非常感谢。

+0

你能说出哪些引用的代码部分出现在哪个文件?我怀疑你的lib的API头包含它们或其中的一部分。如果lib定义了某些功能,但是头部只为它们提供声明,以防交换机被定义....那么你需要交换机。我知道一个[mcve]对于lib来说并不容易,但是试着给出更多的信息来“请”你的代码引用,“** M **几乎** C ** notreally ** VE **”。 – Yunnosch

回答

0

有几种可能的解决方案:

  1. GCC_PREPROCESSOR_DEFINITIONS添加NEW_API像你一样
  2. 删除#ifdef NEW_API#end
  3. 使用#define NEW_API之前导入库头球
  4. 添加+ (nullable NSString *)user;BULib其他失踪方法的分类

我个人更喜欢第三种选择。 它会是这样的:

#define NEW_API 
#import <bulib.h> 
+0

对不起,您能解释一下更多的选项#3吗?谢谢! – emenegro