我想在Ubuntu 9.10盒子上设置交叉编译环境.从我到目前为止阅读的文件(these ones,for example)来看,这涉及编译目标平台的工具链.
我的问题是:如何确定特定目标平台工具链中每个软件包的所需版本?我可以遵循任何经验法则吗?
这是在上面链接的其中一个网站中找到的列表:
的binutils-2.16.1.tar.bz2
Linux的2.6.20.1.tar.bz2
的glibc-2.5.tar.bz2
的glibc-Linux线程-2.5.tar.bz2
GCC-核心4.2.0.tar.bz2
gcc-g -4.2.0.tar.bz2
但是假设我想为标准的Ubuntu 8.04和CentOS 5.3盒子生成可执行文件.什么是必要的包裹?
我的主要需求是避免在客户的机器中出现“/usr/lib / libstdc .so.6:版本`GLIBCXX_3.4.11未找到”之类的错误,但在将来我也想要处理不同的架构.
解决方法:
建立一个使用目标系统上相同版本的libc(和其他库)的跨工具链通常是个好主意.这对于使用版本化符号的库来说尤其重要,或者你可能会遇到“/usr/lib / libstdc .so.6:版本’GLIBCXX_3.4.11’未找到”之类的错误.
相同的架构
为了生成标准Ubuntu 8.04和CentOS 5.3系统的可执行文件,您可以在虚拟机中安装这些发行版,并在虚拟机中进行必要的编译,以确保生成的二进制文件与每个发行版的库版本兼容.
另一种选择是为目标发行版设置chroot构建环境而不是虚拟机.
您还可以构建针对不同环境(不同库版本)的工具链,并在Ubuntu 9.10环境下构建,而无需使用虚拟机或chroot环境.我使用Dan Kegel的crosstool创建了这样的跨工具链.
不同的建筑
正如我在answer中提到的另一个交叉编译问题,我使用Dan Kegel的crosstool来创建我的arm交叉工具链.
看起来它可能稍微过时了,但是有一个build results的矩阵用于各种体系结构,以帮助确定gcc,glibc,binutils和linux内核头文件的合适组合.
必需的包版本
根据我的经验,确实没有经验法则.并非所有gcc,binutils,glibc和linux标头的组合都能成功构建.即使构建完成,也需要进行一定程度的测试以验证构建的成功.这有时通过使用新的交叉工具链编译Linux内核来完成.根据目标系统和体系结构,可能需要对源进行一些修补才能生成成功的构建.
由于您是在Ubuntu 9.10上设置此交叉编译环境,因此您可能需要查看dpkg-cross程序包.
标签:linux,gcc,cross-compiling
来源: https://codeday.me/bug/20190726/1546722.html