【问题标题】:Conditional link a library on iOS条件链接 iOS 上的库
【发布时间】:2013-04-03 17:30:13
【问题描述】:

我想有条件地链接一个库(我有这个库用于 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 和朋友的运行时使用相比)?

【问题讨论】:

  • 这是你想要的吗? Conditional Link Library
  • @AnoopVaidya:那里的答案是“使用-weak_library”,这对我不起作用。

标签: ios xcode


【解决方案1】:

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

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

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

#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

【讨论】:

  • 谢谢。我正在尝试为CoreAudioKit 执行此操作,这是通过蓝牙进行 MIDI 所必需的,但在模拟器中不可用。将框架更改为“可选”并在导入的代码中使用#if 无助于删除library not found 消息。删除框架完全有效。我有点难过。
  • @Yar,我认为最初的问题是针对静态库的,但 CoreAudioKit 是一个(动态)框架,所以你的问题有点不同。你能问一个新问题吗?请随时通过在此处的 cmets 中发布指向新问题的链接来 ping 我。谢谢。
  • 谢谢!问题在这里stackoverflow.com/q/31574430/8047,任何帮助表示赞赏!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 1970-01-01
相关资源
最近更新 更多