ios - Xcode 6.3 上架构 x86_64 的 undefined symbol

标签 ios objective-c c xcode6 x86-64

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

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

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

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

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

首先我想也许这个库不是x86_64 兼容,是空的,或者里面真的没有任何 x86_64 符号。

所以我检查了图书馆的“lipo -info”,这是答案:

enter image description here

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

我找到了符号:enter image description here

enter image description here

所以我的问题是:

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 项目的链接):https://github.com/GhostGumm/CometD-x86_64-issue

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

遗憾的是问题仍然存在。编译成功后,我尝试使用 lib ,但是,当我“分配”和“初始化”我的主类时,就像这样:

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

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

不过我会继续调查。

最佳答案

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

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

您需要使用其余必要的源更新您的项目,然后才能正确链接。

关于ios - Xcode 6.3 上架构 x86_64 的 undefined symbol ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808981/

相关文章:

ios - 从 XML Parse 匹配 NSDictionary

iphone - 计算字符串的速度

ios - Objective-C 接口(interface)、委托(delegate)和协议(protocol)

c - 为什么调用另一个宏的宏显示错误?

c - 从不同位置读取文件并放入 C 中的数组

ios - 添加了 UITableViewCell GestureRecognizer 委托(delegate)不工作

ios - 向 SwiftUI TextField 添加不可编辑的后缀

ios - 高效地迭代 subview 并返回过滤后的 UIView 子集

objective-c - iPad 模拟器和设备之间 NSDateFormatter 的区别

c - 从内存中读取数据