Xcode 6.3 上架构 x86_64 的未定义符号

Undefined symbols for architecture x86_64 on Xcode 6.3

我正在完成一个开源 C 编码的 CometD 库,我认为向像我这样的 OSX/iOS 用户开放它是个好主意。

为了减轻 OSX/iOS 开发人员的工作,我想从静态 C 库切换到 Xcode iOS 静态库。所以我遵循了网上的建议,生成了一个静态 iOS 兼容库。

问题是,每次我尝试使用它时,都会收到类型错误:

Undefined symbols for architecture x86_64: ******, referenced from: -********** in *******.a(*******.o)

我库中的几乎每个 C 函数都会重复此错误。

首先我想也许图书馆不是 x86_64 compatible、空的,或者里面真的没有任何 x86_64 符号。

所以我在图书馆查了 "lipo -info",答案是:

为了确保我还在库中使用了 "nm -arch x86_64",并获取了 Xcode 报告为错误的几个未定义函数。我以为我会错,除了猜猜什么也没发现?

我找到了符号:

所以我的问题是:

If the symbols are present in a x86_64 compatible library, why Xcode prompting this error ? Even if I compiling the library for all arm*/s types I am still getting this x86_64 error.

我是没有意识到什么还是我只是做错了?

您的回答总是值得赞赏。

更新(这是Xcode项目的link):https://github.com/GhostGumm/CometD-x86_64-issue

更新 2:Trojanfoe 先生引起了我的注意,因为我在编译时遇到了 linking 警告。事实上,linker 似乎错过了加载库以寻找不存在的目录。将库移动到正确的目录后,手动 linking 它,x86_64 错误消失了。

遗憾的是问题仍然存在。编译成功后,我尝试使用 lib ,但是,当我 "alloc" 和 "init" 我的主要 class 像这样:

  ZetaFactory *Client = [[ZetaFactory alloc] init]; 

x86_64 错误以十亿个太阳的真正凶猛咆哮着回归。 我将 link 发布到 Xcode 项目,请随时测试它,因为我对如何修复它没有更多的想法,但更重要的是为什么以及在哪里会出现错误。

None越少我会继续调查

我下载并尝试构建您的项目。查看 link 错误 - 例如 init_stack_remove_data 未找到 - 它们是正确的。您的项目源中的任何地方都没有 init_stack_remove_data 的定义。

在您上面引用的 "nm -arch x86_64" 输出中,请注意函数定义前的 "U" 表示该函数的 use,而不是它的定义。 nm 输出显示 linker 是正确的 - 这些函数由您的代码调用,但从未定义。定义它们后,您会在 nm 输出中的函数前看到 "T"。

您需要使用其余必要的源更新您的项目才能link没有错误。