我有一个符号在 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 吗?这不是我真正需要的选项,还是只是没有像预期的那样工作?