CentOS安装交叉编译环境中遇到的错误和解决办法

时间:2022-12-12 14:48:22

友善之臂的开发环境是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 ,成功解决