Hak*_*lee 23 c x86-64 objective-c ios xcode6
我最终确定了一个开源C编码的CometD库,我认为将它打开给像我这样的OSX/iOS用户是一个好主意.
为了简化OSX/iOS开发人员的工作,我想从静态C库切换到Xcode iOS Static Libary.所以我按照网上的建议,生成了一个静态的iOS兼容库.
问题是,每当我尝试使用它时,我都会收到类型错误:
架构x86_64:******的未定义符号,引用自: - **********in*******.a(*******.o)
我的库中几乎每个C函数都会重复此错误.
首先我想也许库不是x86_64 compatible
,空的,或者真的没有任何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错误消失.
可悲的是,问题仍然存在.在成功编译之后,我尝试使用lib,但是,当我"分配"和"初始化"我的主类时,如下所示:
ZetaFactory *Client = [[ZetaFactory alloc] init];
Run Code Online (Sandbox Code Playgroud)
x86_64错误随着十亿个太阳的真正激烈而咆哮.我发布了Xcode项目的链接,请随意测试它,因为我没有更多关于如何解决它的想法,但更重要的是为什么以及在哪里有这个错误.
尽管如此,我还是会继续调查.
我下载并尝试构建您的项目。查看链接错误 - 例如找不到 init_stack_remove_data - 它们是正确的。项目源中的任何位置都没有 init_stack_remove_data 的定义。
在上面引用的“nm -arch x86_64”输出中,请注意函数定义之前的“U”表示该函数的使用,而不是它的定义。nm 输出显示链接器是正确的 - 这些函数由您的代码调用,但从未定义。定义它们后,您将在 nm 输出中的函数之前看到一个“T”。
您需要使用其余的必要源更新您的项目,然后才能无错误地链接。
归档时间: |
|
查看次数: |
1677 次 |
最近记录: |