我正在完成一个开源的C语言CometD库,我认为将其开放给像我一样的OSX/iOS用户是一个好主意。
为了方便OSX/iOS开发人员的工作,我想从静态C库转换为Xcode iOS静态库。因此,我遵循了网上的建议,并生成了一个静态iOS兼容库。
问题在于,每次我尝试使用它时,我都会收到类型为“Undefined symbols for architecture x86_64”的错误消息:
Undefined symbols for architecture x86_64: ******, referenced from: -********** in *******.a(*******.o)
这个错误几乎针对我库中的每个C函数都会重复出现。
起初,我以为可能是库不兼容x86_64,或者为空,或者确实没有任何x86_64符号。
所以我用“lipo -info”检查了一下库,这是答案: 为了确保,我还在库上使用了“nm -arch x86_64”,并查找了Xcode报告的多个未定义函数。我原以为会错,什么也找不到,但是猜猜看呢?
我找到了这些符号:
我的问题是:如果符号在x86_64兼容库中存在,为什么Xcode会提示此错误?即使我将库编译为所有arm*/s类型,我仍然会收到x86_64错误。我是不是对某些事情毫无所知或者做错了什么?
非常感谢您的回答。
更新(这是Xcode项目链接):https://github.com/GhostGumm/CometD-x86_64-issue 更新2:Trojanfoe先生引起了我的注意,因为我在编译时有一个链接警告。实际上,链接器似乎错过了加载库,寻找一个不存在的目录。将库移动到正确的目录后,手动链接它,x86_64错误消失了。
遗憾的是,问题仍然存在。在成功编译后,当我像这样“alloc”和“init”我的主类时,我尝试使用lib:
为了方便OSX/iOS开发人员的工作,我想从静态C库转换为Xcode iOS静态库。因此,我遵循了网上的建议,并生成了一个静态iOS兼容库。
问题在于,每次我尝试使用它时,我都会收到类型为“Undefined symbols for architecture x86_64”的错误消息:
Undefined symbols for architecture x86_64: ******, referenced from: -********** in *******.a(*******.o)
这个错误几乎针对我库中的每个C函数都会重复出现。
起初,我以为可能是库不兼容x86_64,或者为空,或者确实没有任何x86_64符号。
所以我用“lipo -info”检查了一下库,这是答案: 为了确保,我还在库上使用了“nm -arch x86_64”,并查找了Xcode报告的多个未定义函数。我原以为会错,什么也找不到,但是猜猜看呢?
我找到了这些符号:
![enter image description here](https://istack.dev59.com/5jSFA.webp)
非常感谢您的回答。
更新(这是Xcode项目链接):https://github.com/GhostGumm/CometD-x86_64-issue 更新2:Trojanfoe先生引起了我的注意,因为我在编译时有一个链接警告。实际上,链接器似乎错过了加载库,寻找一个不存在的目录。将库移动到正确的目录后,手动链接它,x86_64错误消失了。
遗憾的是,问题仍然存在。在成功编译后,当我像这样“alloc”和“init”我的主类时,我尝试使用lib:
ZetaFactory *Client = [[ZetaFactory alloc] init];
x86_64错误带着数十亿个太阳的真正猛烈回来了。
我已经发布了Xcode项目的链接,请随意测试,因为我没有更多的想法来修复它,但更重要的是为什么和在哪里出现了问题。
无论如何,我将继续调查。