加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

objective-c – 如何使GNUstep libobjc2工作?

发布时间:2020-12-16 09:42:41 所属栏目:百科 来源:网络整理
导读:我下载并构建了GNUstep libobjc2 1.6.1, svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/1.6.1/ repcd repmake 当我尝试编译Objective-C代码时出现此错误. hoon@ubuntu:~/work/objc2$clang -fobjc-nonfragile-abi -fobjc-arc -fblocks *.m *.a -l pth
我下载并构建了GNUstep libobjc2 1.6.1,

svn co http://svn.gna.org/svn/gnustep/libs/libobjc2/1.6.1/ rep
cd rep
make

当我尝试编译Objective-C代码时出现此错误.

hoon@ubuntu:~/work/objc2$clang -fobjc-nonfragile-abi -fobjc-arc -fblocks *.m *.a -l pthread; ./a.out
Objective-C ABI Error: Loading modules from incompatible ABIs while loading 
a.out: loader.c:38: __objc_exec_class: Assertion `objc_check_abi_version(module)' failed.
Aborted (core dumped)

看来我需要用一些不同的配置来构建libobjc.a.有什么问题,我该怎么做才能解决这个错误?

环境:Ubuntu 12.04 LTS

解决方法

这是一个很好的问题,因为LLVM和CLang以及GNUstep声称使用起来很难或很复杂.他们确实要求用户阅读(并重读)他们的文档.我刚刚为Ubuntu发现了这个组合,这非常有趣.目前有许多活动部件.

如果OP在其中一个gnustep邮件列表上得到答案,那么很高兴听到它如何解决.

没有建议正常的重启路径,只是直接从LLVM和GNUstep安装最新的,这是我的看法.

OP正在尝试使用ARC并使用gunstep / libobjc2项目提供的运行时阻塞.

libobjc2可能应该使用clang版本3.2构建 – 或者可能是树的顶部.
clang -v会告诉你你机器上的版本.我发现即使Ubuntu 12.10也不提供clang-3.2.所以我从LLVM网站下载它.他们为Ubuntu 12.04 LTS预装了二进制文件.为了让make使用clang进行这个构建步骤,我已经看到了设置和导出CC = clang和CXX = clang的说明.

构建libobjc2后,必须小心安装它.如果系统已经有一个较旧的libobjc.so.x.y库(这为Obj-C提供了运行时环境),那么当您开始编译自己的源时,clang或链接器可能会错误地使用它.我发现从libobjc2源构建的libobjc.so.4.6.0在我运行make install步骤时在Ubuntu 12.04和12.10上安装到/usr/local/lib. libobjc2安装步骤未设置此路径.

为了获得这个库,我必须将/usr/local/lib添加到env变量LD_LIBRARY_PATH.尝试“找到libojbc.so”以查看系统上是否还有其他版本也没什么坏处.

最后,libobjc2自述文件https://github.com/gnustep/gnustep-libobjc2#readme表示这个新版本的gnustep库支持两个ABI,每个ABI支持ARC和块.我看到的关于使用libobjc2进行编译的建议是提供预期要编译和链接的运行时版本:-fobjc-runtime = gnustep.在Ubuntu上的Clang仍默认为较旧的ABI. -fobjc-nonfragile-abi可能会完成相同的事情,但我已经看到它提到标志已经或将被弃用.

OP错误实际上可能来自运行a.out的步骤,而不是编译clang的地方.也许动态加载器正在拿起传统的libobj.so.再次,我会使用locate来查看系统是否有多个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读