5

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

我读了一个问题(还有几个类似的问题):iOS 条件链接静态库

-weak_library 链接器标志

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

-weak_library LibraryNameWithPath

但是它给了我一个错误:

ld: file not found: LibraryNameWithPath

-weak-l 链接器标志

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

-weak-lShortLibraryName

并得到相同的结果:

ld: library not found for -lShortLibraryName

想法

为什么要检查库是否存在,如果它被明确标记为弱链接?

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

4

1 回答 1

5

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

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

在此处输入图像描述

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

#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。一个

于 2013-04-05T11:46:42.333 回答