我正在开发Xcode项目,我有一个静态库,链接到另一个库,我在#34;其他C标志(参见图像)中使用标志-DMODULE进行编译。
然而,在执行期间,当我到达其中一个静态库函数时,MODULE不再定义,任何想法为什么?
静态库在运行时之前链接,并且由一堆.o文件组成,因此我认为它们与标志所适用的父库中的任何其他.o文件具有相同的处理方式。我错过了什么吗?
答案 0 :(得分:1)
编译器定义在从源到对象(.o
)的转换过程中应用。静态库只是粘在一起的一堆.o
个文件。如果您已有静态库,则无法再对其应用定义。如果需要更改定义,则需要重新编译源代码而不是使用静态库。
请记住,编译器定义由预处理器应用。它们用其他一些文本替换部分源代码文本。它们在编译器甚至看到代码之前应用(更不用说链接器了)。