链接错误,同时build立一个unit testing目标
我有一个定期的目标和unit testing目标的XCode4 / iOS项目。 一切工作正常,除非我试图#我的testing类中的我的类之一,并尝试使用它。 如果我尝试构buildunit testing目标,则会收到以下链接错误:
Undefined symbols for architecture i386: "_OBJC_CLASS_$_FRRCategory", referenced from: objc-class-ref in CategoryTests.o ld: symbol(s) not found for architecture i386 collect2: ld returned 1 exit status
在CategoryTests.m中,我以这种方式导入头文件:
#import "../todoro/FRRCategory.h"
我究竟做错了什么?
确保FRRCategory源文件已经添加到您的unit testing目标的编译源文件中。
Xcode 4:
项目导航 – >“[项目名称]” – >在目标下select您的unit testing目标 – >构build阶段 – >展开编译源 – >点击+编译源的底部并添加正确的源文件。
按照这里的说明。 它不需要你添加任何文件来编译源代码。
我首先错过了“默认情况下隐藏的符号= NO”应该是针对您的应用目标,而不是testing目标。
无论如何,它为我工作(TM)。
另一个你可能遇到的问题是如果你的unit testing使用的C函数(或类似的),而不是在实际的应用程序中使用。
这可能只限于有一个子项目。 在我的情况
- 应用
- 分项目
- embedded的AC库(即直接编译的.c和.h文件)
- 分项目
我的unit testing使用了一些其他地方没有使用过的C函数,这些函数被从应用程序二进制文件中删除(而不是从子项目的.a文件中)。
解决的办法是
- closures应用程序Debug版本的“Dead Code Stripping”。*和
- 确保你的unit testing在Scheme设置中使用了Debug而不是Release。
(*不要这样做的释放configuration,因为它会膨胀与永远不会调用的代码的应用程序)。
如果文件位于框架内,则只应在引用内引用文件夹。 否则,只要将文件添加到项目中,只需执行#import "FRRCategory.h"
。 那么,除非你使用标题searchpath做了一些奇怪的事情。