交叉编译hello.c遇到的问题及解决历程
交叉编译链hello.c:
arm-linux-gcc -static hello.c -o hello.
执行语句后出现错误:缺少共享库libstdc++.so.6(如图)
d
这种问题之前遇到过,就是安装缺少的so包文件,于是上网查找到应该安装的包。由于上次安装glibc时给系统换了源,所以只要执行下面命令即可: yum install libstdc++.i686
成功安装后再次编译hello.c,发现还是出现上述错误。之后我在/usr/lib64文件夹下找到了libstdc++.so.6的库文件(如图)
既库文件在这里,而编译时就是找不着这个库。于是我的思路是:给它指定动态库路径,按照网友帖子一顿操作,再次尝试编译hello.c,发现还是不行(哎!)这下回到起点了。
我的分析可能出错的地方:①找到的libstdc++.so.6文件不是需要的共享库文件,因为该文件为浅蓝色——链接文件.②.我指定动态库路径有问题,并没有能够链接到需要的共享库。
(我暂时还不能解释这是什么原因,写下随笔一是记录学习,二是希望网友能给点意见)
但是我还是解决了该问题,尽管我自己不知道怎么就解决了!!嘻嘻
接下来我再次尝试安装了该so库文件包,不过这次是在网上下载的rpm包:libstdc++-4.4.7-18.el6.i686.rpm以及安装依赖的另一个RPM包libgcc-4.4.7-18.el6.i686.rpm(点击即可转到下载页面).两个包要一起安装,安装命令:
rpm -ivh libstdc++-4.4.7-18.el6.i686.rpm libgcc-4.4.7-18.el6.i686.rpm
再再次编译,奇迹出现了,出现错误,缺少libz.so.1库(如图)。
虽然还是出错,但好歹上一个错误没再出现,当然还是安装相关文件包,执行命令:
yum install zlib.i686
安装成功后,再再再次编译,终于没有错误,获得可执行文件 hello。
之后通过串口hello文件传输到开发板上,把文件属性改为可执行 chmod +x hello ,成功在mini2440运行该程序。
最后附上我查看的一篇博客地址,这篇文章介绍了各种xx.s0.xx缺少时需要安装的文件包(非常感谢!!)。