在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库。。。
一波三折,遇到问题要冷静。所以打算把这个记录下来,当笔记了。