【问题标题】:Undefined symbols for architecture x86_64: Mac OS 10.8架构 x86_64 的未定义符号:Mac OS 10.8
【发布时间】:2023-12-21 18:34:01
【问题描述】:

一般来说,我知道这个错误是什么意思。但这是我的问题的独特之处 -

  1. 我确实有带有链接器无法找到的符号的(静态)库。我运行了“nm”来验证这一点,明确地寻找 x86_64 符号。他们在那里。
  2. 但是 - 我在同一个位置也有一个同名的动态库。我的猜测是链接器正在抓取 .dylib,而不是 .a,因此它无法找到所需的符号。

我确实找到了这篇关于当你有同名的静态和动态库时强制静态链接的帖子 - How can I force linking with a static library when a shared library of same name is present

问题是我正在使用 Ant 构建脚本并尝试了一些不同的方法来将解决方案合并到上面的帖子中,但没有太大的成功。

所以我的问题是 -

  1. 我的预感在上面的 #2 中是否正确,因为库名称会导致“错过”?
  2. 有人知道Ant 脚本解决方案吗?我在 Ant 中尝试过的一些事情是 -
    一种。 "linkerarg value="static"" 湾。 "linkerarg value="static"" 后跟 "linkerarg value="llibname""

更新 - 我对链接器选择 .dylib 而不是 .a 的看法是正确的 - 我将静态库 (.a) 重命名为其他内容,并且它能够找到它的所有符号需要。现在的问题是 - 我们如何明确指示 Ant 脚本选择 .a 而不是 .dylib?

ANSWER - 它是一个名为 force_load 的链接器标志。所以 -force_load filename.a 会这样做。

【问题讨论】:

  • 您是否有机会发布您的构建文件的 sn-p 来为您使用 linkerargs 提供上下文?
  • 这就是我的 Martin -

标签: macos gcc ant ld llvm-gcc


【解决方案1】:

它是一个名为 *force_load* 的链接器标志。所以 -force_load filename.a 会这样做。

【讨论】: