有条件地链接iOS上的库

时间:2013-04-03 17:30:14

标签: ios xcode

我想有条件地链接一个库(我有这个库用于iOS设备,但我没有它用于模拟器)。我正在使用XCode 4.6和iOS 6.1。

我读了一个问题(和几个相似的问题):iOS conditional link static library

-weak_library链接器标记

我尝试用以下标志构建项目:

-weak_library LibraryNameWithPath

然而它给了我一个错误:

ld: file not found: LibraryNameWithPath

-weak-l链接标记

我尝试使用以下标志构建它:

-weak-lShortLibraryName

得到了相同的结果:

ld: library not found for -lShortLibraryName

思想

为什么哎呀,它是否检查了库的存在,是否明确标记为弱链接?

有没有办法在构建时间内进行条件链接(与dlopen,dlclose和朋友的运行时使用相比)?

1 个答案:

答案 0 :(得分:4)

我实际上没有尝试直接使用构建标志来执行此操作,但我已使用Xcode GUI设置完成此操作。选择您的构建目标,然后选择构建阶段,然后选择将静态库添加到要链接的二进制文件列表中。

但是,请从右侧的必需/可选菜单中选择可选(这不是默认设置)。

enter image description here

由于这是一个你正在谈论的静态库,我认为你需要在你的代码中加入一些预处理器防护,以禁止在模拟器中使用该库:

#if TARGET_IPHONE_SIMULATOR
   NSLog(@"do nothing here!");
#else
   HelloLibrary* hl = [[HelloLibrary alloc] init];
   NSString* result = [hl helloLibraryFoo];
#endif

我做了没有其他工作(没有修改其他构建设置)。

为模拟器构建时,我收到此警告:

  

ld:警告:忽略文件   /Users/me/Desktop/code/MyAppName/libHelloLibrary.a,文件是为   存档不是被链接的体系结构(i386):   /Users/me/Desktop/code/MyAppName/libHelloLibrary.a