友善之臂的开发环境是Fedora14,但是本地的是CentOS6.4(64位的),可能是这个环境的不同,所以在安装交叉编译环境的时候出现了一下问题。
A 按照友善之臂的文档,解压了arm-linux-gcc-4.4.3.tar.gz的版本报
tar xvzf arm-linux-gcc-4.4.3.tar.gz -C
B 修改/root/.bashrc,在最后一行增加了如下的内容
export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin
C 注销或重启Linux后,输入下面的命令来查询版本# arm-linux-gcc -v
/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: /opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: 没有那个文件或目录
/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc: line 15: /opt/FriendlyARM/toolschain/4.4.3/bin/.arm-none-linux-gnueabi-gcc: 成功
D 网络查找了下原因,说可能是64位的系统安装了32的程序 & 缺少依赖的包
解决办法:
1 yum install glibc.i686
(插一句,这里当时不小心被CTRL~C搞中断了,导致后面重新执行命令的时候出现了类似下面的错误或警告:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them.
意思是有未完成的yum事务,建议先运行yum-complete-transaction命令清除。消除警告步骤如下:# 安装 yum-complete-transaction(这是一个能发现未完成或被中断的yum事务的程序)
yum install yum-utils
# 清除yum缓存
yum clean all
运行上述命令需要root权限。yum 会把下载的软件包和header存储在cache中,而不会自动删除。可用yum clean headers清除header,yum clean packages清除下载的rpm包,yum clean all全清。2 yum install ld-linux.so.2
E 完成后,再次执行arm-linux-gcc -v 查询版本 (最好能够重新/注销后再查询下)
# arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)
问题:交叉编译环境安装好后,简单编译一个C文件,出现如下错误
[hyman@bihu pro]$ arm-linux-gcc -o a.o a.c
/opt/FriendlyARM/toolschain/4.4.3/libexec/gcc/arm-none-linux-gnueabi/4.4.3/cc1: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
A 应该是libstdc++.so.6缺少;使用下面的命令进行查询
# yum whatprovides libstdc++.so.6
已加载插件:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.zju.edu.cn
* extras: mirrors.163.com
* updates: mirror.neu.edu.cn
libstdc++-4.4.7-11.el6.i686 : GNU Standard C++ Library
Repo : base
匹配来自于:
Other : libstdc++.so.6
安装对应包:
# yum install libstdc++-4.4.7-11.el6.i686
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.zju.edu.cn
* extras: mirrors.163.com
* updates: mirror.neu.edu.cn
解决依赖关系
--> 执行事务检查
---> Package libstdc++.i686 0:4.4.7-11.el6 will be 安装
--> 处理依赖关系 libgcc_s.so.1(GLIBC_2.0),它被软件包 libstdc++-4.4.7-11.el6.i686 需要
--> 处理依赖关系 libgcc_s.so.1(GCC_4.2.0),它被软件包 libstdc++-4.4.7-11.el6.i686 需要
--> 处理依赖关系 libgcc_s.so.1(GCC_3.3),它被软件包 libstdc++-4.4.7-11.el6.i686 需要
--> 处理依赖关系 libgcc_s.so.1(GCC_3.0),它被软件包 libstdc++-4.4.7-11.el6.i686 需要
--> 处理依赖关系 libgcc_s.so.1,它被软件包 libstdc++-4.4.7-11.el6.i686 需要
--> 执行事务检查
---> Package libgcc.x86_64 0:4.4.7-3.el6 will be 升级
---> Package libgcc.i686 0:4.4.7-11.el6 will be 安装
---> Package libgcc.x86_64 0:4.4.7-11.el6 will be an update
--> 完成依赖关系计算
依赖关系解决
================================================================================
软件包 架构 版本 仓库 大小
================================================================================
正在安装:
libstdc++ i686 4.4.7-11.el6 base 301 k
为依赖而安装:
libgcc i686 4.4.7-11.el6 base 113 k
为依赖而更新:
libgcc x86_64 4.4.7-11.el6 base 102 k
事务概要
================================================================================
Install 2 Package(s)
Upgrade 1 Package(s)
总下载量:517 k
确定吗?[y/N]:y
下载软件包:
(1/3): libgcc-4.4.7-11.el6.i686.rpm | 113 kB 00:00
(2/3): libgcc-4.4.7-11.el6.x86_64.rpm | 102 kB 00:00
(3/3): libstdc++-4.4.7-11.el6.i686.rpm | 301 kB 00:02
--------------------------------------------------------------------------------
总计 104 kB/s | 517 kB 00:04
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在安装 : libgcc-4.4.7-11.el6.i686 1/4
正在升级 : libgcc-4.4.7-11.el6.x86_64 2/4
正在安装 : libstdc++-4.4.7-11.el6.i686 3/4
清理 : libgcc-4.4.7-3.el6.x86_64 4/4
Verifying : libgcc-4.4.7-11.el6.i686 1/4
Verifying : libstdc++-4.4.7-11.el6.i686 2/4
Verifying : libgcc-4.4.7-11.el6.x86_64 3/4
Verifying : libgcc-4.4.7-3.el6.x86_64 4/4
已安装:
libstdc++.i686 0:4.4.7-11.el6
作为依赖被安装:
libgcc.i686 0:4.4.7-11.el6
作为依赖被升级:
libgcc.x86_64 0:4.4.7-11.el6
完毕!
再次执行,又出现如下的错误
# arm-linux-gcc a.c -o a.o
/opt/FriendlyARM/toolschain/4.4.3/lib/gcc/arm-none-linux-gnueabi/4.4.3/../../../../arm-none-linux-gnueabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
和上面的处理方法一样,安装对应的包先查询
# yum whatprovides libz.so.1
已加载插件:fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
* base: mirrors.zju.edu.cn
* extras: mirrors.163.com
* updates: mirror.neu.edu.cn
zlib-1.2.3-29.el6.i686 : The zlib compression and decompression library
Repo : base
匹配来自于:
Other : libz.so.1
再安装
[root@bihu pro]# yum install zlib-1.2.3-29.el6.i686
已加载插件:fastestmirror, refresh-packagekit, security
设置安装进程
Loading mirror speeds from cached hostfile
* base: mirrors.zju.edu.cn
* extras: mirrors.163.com
* updates: mirror.neu.edu.cn
解决依赖关系
--> 执行事务检查
---> Package zlib.i686 0:1.2.3-29.el6 will be 安装
--> 完成依赖关系计算
依赖关系解决
=======================================================================================
软件包 架构 版本 仓库 大小
=======================================================================================
正在安装:
zlib i686 1.2.3-29.el6 base 73 k
事务概要
=======================================================================================
Install 1 Package(s)
总下载量:73 k
Installed size: 136 k
确定吗?[y/N]:y
下载软件包:
zlib-1.2.3-29.el6.i686.rpm | 73 kB 00:00
运行 rpm_check_debug
执行事务测试
事务测试成功
执行事务
正在安装 : zlib-1.2.3-29.el6.i686 1/1
Verifying : zlib-1.2.3-29.el6.i686 1/1
已安装:
zlib.i686 0:1.2.3-29.el6
完毕!
再次执行arm-linux-gcc a.c -o a.o ,成功解决