从Xcode忽略动态库中的未定义符号

时间:2013-06-24 17:58:19

标签: xcode clang ld

我有一个在Xcode动态库目标中引用的符号,但它没有在那里定义。我需要这个符号未定义。这是因为它将在包含它的每个进程中进行不同的编译(基于一些编译时定义)。

Xcode中的动态库目标无法链接,因为它包含对此符号的引用(这不是意外),但我知道该符号将在运行时可用。我将把这个函数编译到公共库链接到的每个目标中。

我正在尝试让链接器在运行时标记此特定符号以进行动态查找。

如果我在我的Xcode项目中指定“-undefined dynamic_lookup”作为“其他链接器标志”之一,我就可以将其链接起来。问题是我不想走那么远。我知道只有1个符号应该是未定义的。如果它们被保留为未定义,我希望所有其余的符号产生错误(我希望基本上避免运行时遗漏符号错误。)

我找到了一个ld链接器选项,看起来它应该做我需要的东西(来自ld手册页):

-U symbol_name
             Specified that it is ok for symbol_name to have no definition.  With -two_levelnamespace, the resulting symbol will be marked dynamic_lookup which means dyld will search all loaded images.

然而,我似乎无法让它发挥作用。每当我在“其他链接器标志”中指定“-U symbolName”或“-UsymbolName”时,我仍然会遇到此链接器错误:

Undefined symbols for architecture x86_64:
     "_symbolName", referenced from: <various object files>

我可能错误地使用了-U吗?这不是我真正需要的选择,还是它不像它应该的那样工作?

2 个答案:

答案 0 :(得分:5)

-Wl,-undefined,dynamic_lookup设为OTHER_LDFLAGS

链接:Xcode clang link: Build Dynamic Framework (or dylib) not embed dependencies

答案 1 :(得分:0)

设置-Wl,-undefined,dynamic_lookup很危险,因为它会禁用所有未定义的警告。

使用-Wl,-U,symbol_name中的OTHER_LDFLAGS禁用单个符号的警告。

在Xcode中:

  • 转到项目/选择目标
  • 点击构建设置
  • 搜索Other Linker Flags
  • 输入选项