relocation Rx86_64_32 against'.rodata.str1.1'can not be used when making a shared object

在使用Buildroot构建根文件系统时遇到与fPIC相关的错误。作者通过排查发现,问题源于本地已安装的ncurses库版本与Buildroot需求不符。最终通过卸载本地ncurses并使用Buildroot自带版本解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在ubantu下,buildroot在编译创建根文件系统时遇到relocation Rx86_64_32 against’.rodata.str1.1’can not be used when making a shared object;recompile with -fPIC
如下图所示:
在这里插入图片描述在这里插入图片描述

这是我在用buildroot 来制作根文件系统的时候出现的问题,知道是fPIC的问题,但是一直改都不对。编译时连接动态库没有加fPIC参数。找了好多的类似的文章都没有解决,好几天都在纠结这个问题。有时候感觉自己都快怀疑自己是不是可能不适合这方面。。。
反复试了很多次,装的是ubantu 16.04版本的系统,还以为是64位系统用的32位编译器产生的问题,今天突然想再来调调,然后想着这个装单系统的电脑一直错,我就换了我的另一台装电脑,装得有虚拟机,把这个buildroot放在了虚拟机上跑,除了要装git,texinfo还有lib32z1这些东西,就把根文件系统构建成功了。。。
不可能是系统的问题吧,我就把ubantu重装了,又重新来构建根文件系统,发现还是出现同样的问题。然后我又重装了系统好多次。
在重装系统的时候,突然想到了一个问题。这个ncurses在buildroot下本来j就下了有包的,是之前下载buildroot的时候,怕网慢了,就已经下好了。而我电脑之前在编译内核的时候就先安装了ncurses5.9.,所以在编译buildroot的时候,它检查到我电脑上装得有ncurses,它就直接调用了我电脑本地装的ncurses5.9的库,所以就出现了连接的动态库,在需要重新加-fPIC重新编译的问题
想到这里,我就把我电脑的ncurses直接卸载了,然后再用buildroot重新构建根文件系统,这次很顺利的就成功了。
这次我再查看,发现它用的是我之前在buildroot下下好的包,直接调用里面的库,然后就解决了这个问题。所以以后一定要细心一点。虽然都是ncurese库。。。
一波三折,遇到问题要冷静。所以打算把这个记录下来,当笔记了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值