Toolchain安装位置考(一)

2014-11-24 09:24:30 · 作者: · 浏览: 0

在如此安装BCM7403本人编译任何程序时,都会遇到如下错误:


/home/本人/work/current/BCM/BCM7403/ToolChain/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/bin/../lib/gcc/mipsel-linux-uclibc/3.4.6/../../../../mipsel-linux-uclibc/bin/ld: warning: ld-uClibc.so.0, needed by /home/本人/work/current/BCM/BCM7403/ToolChain/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/bin/../lib/gcc/mipsel-linux-uclibc/3.4.6/../../../../mipsel-linux-uclibc/lib/libc.so, not found (try using -rpath or -rpath-link)
/home/本人/work/current/BCM/BCM7403/ToolChain/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/bin/../lib/gcc/mipsel-linux-uclibc/3.4.6/../../../../mipsel-linux-uclibc/lib/libc.so: undefined reference to `__libc_stack_end'
collect2: ld returned 1 exit status


但郁闷之情未解阿,于是看看toolchain信息。
#mipsel-linux-gcc -v
../gcc-3.4.6/configure --prefix=/opt/toolchains/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/ --target=mipsel-linux-uclibc --build=mipsel-linux --host=mipsel-linux --enable-target-optspace --disable-nls --with-gnu-ld --enable-shared --enable-languages=c,c++ --enable-threads --infodir=/opt/toolchains/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/info --mandir=/opt/toolchains/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/man --disable-__cxa_atexit --disable-checking --with-arch=mips32 --with-float=soft
Thread model: posix
gcc version 3.4.6


看到--prefix=/opt/toolchains/crosstools_sf-linux-2.6.12.0_gcc-3.4.6-21_uclibc-0.9.28-20050817-20070607/这里时,突然想到,会不会是要将toolchain放到此指定目录呢?于是测试之,发现问题被解决了。


总结如下:
某些toolchain会指定希望自己存放的位置,这样的话才可以顺利找到自己的库。


前文说了这么多,终于说到现在了。最近公司需要在Trident的PNX84xx上编译游戏。之前负责的同事遇到一个问题如下:


使用Trident的SDK安装toolchain后,编译编译时会出如下问题:


arm-linux-gcc test.c -o test
/home/本人/work1/current/Trident/Trident_Develop/SRC/open_source_archive/linux/toolchains/gnu_cortex-a9_tools/usr/bin/../lib/gcc/arm-linux-uclibcgnueabi/4.4.0/../../../../arm-linux-uclibcgnueabi/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status


Trident工程师给出的方案是:ld时添加


--sysroot=


/home/本人/work1/current/Trident/Trident_Develop/SRC/open_source_archive/linux/toolchains/gnu_cortex-a9_tools/


本人看到后觉得好像与之前遇到的问题类似,都是找不到基础库(crt1.o好像是用来在main之前构建环境并加载的)。


但游戏开发中用到非常多的OpenSource,自身的工程也非常多,如果一个个添加,好像很BT。 所以本人准备先解决之。


于是再次使用:


#arm-linux-gcc -v


Using built-in specs.
Target: arm-linux-uclibcgnueabi
Configured with: /build/dev/nitingarg/buildroot/toolchain_build_arm/gcc-4.4.0/configure --prefix=/usr --build=i386-pc-linux-gnu --host=i386-pc-linux-gnu --target=arm-linux-uclibcgnueabi --enable-languages=c,c++ --with-sysroot=/build/dev/nitingarg/buildroot/build_arm/staging_dir --with-build-time-tools=/build/dev/nitingarg/buildroot/build_arm/staging_dir/usr/arm-linux-uclibcgnueabi/bin --disable-__cxa_atexit --enable-target-optspace --with-gnu-ld --disable-libssp --disable-tls --enable-shared --with-gmp=/build/dev/nitingarg/buildroot/toolchain_build_arm/gmp --with-mpfr=/build/dev/nitingarg/buildroot/toolchain_build_arm/mpfr --disable-nls --enable-threads --enable-multilib --disa