GDB 无法为 Arm-Linux 交叉编译



Linux已经同时拥有gcc&环境路径中的arm-gcc

[fit@localhost gdb-arm]$ gcc -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-cpu=generic --build=i386-redhat-linux
Thread model: posix
gcc version 4.3.0 20080428 (Red Hat 4.3.0-8) (GCC) 

[fit@localhost gdb-arm]$ arm-none-linux-gnueabi-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/src/gcc-4.3/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-gnu-as --with-gnu-ld --with-specs='%{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables}' --enable-languages=c,c++ --enable-shared --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery G++ Lite 2009q1-203' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --with-mpfr=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/obj/host-libs-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu/usr --disable-libgomp --enable-poison-system-directories --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/mitchell/builds/4.3-arm-none-linux-gnueabi-respin/lite/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) 

所以我配置了gdb 6.6:

$ ./configure --target=arm-none-linux-gnueabi --host=i386-redhat-linux -v

编译时没有出现错误,但看起来gdb使用了错误的编译器。

file ./gdb-build/bin/arm-none-linux-gnueabi-gdb
./gdb-build/bin/arm-none-linux-gnueabi-gdb: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, not stripped

那么如何为gdb指示正确的CC呢?

我尝试了make CC=arm-none-linux-gnueabi-gcc,但会得到错误:

arm-none-linux-gnueabi-gcc ../.././sim/arm/../common/gentmap.c -o gentmap -g -O -I. -I../.././sim/arm -I../common -I../.././sim/arm/../common -I../../include -I../.././sim/arm/../../include -I../../bfd -I../.././sim/arm/../../bfd -I../../opcodes -I../.././sim/arm/../../opcodes  
rm -f tmp-tvals.h tmp-tmap.c
./gentmap -h >tmp-tvals.h
/bin/sh: ./gentmap: cannot execute binary file
./configure --target=arm-none-linux-gnueabi --host=i386-redhat-linux -v

不要使用--target。这对Autotools来说意义重大。

使用--build--host。类似于:

./configure --build=$(config.guess) --host=arm-none-linux-gnueabi

--build应指定运行Autotools的机器,--host应指定包将在其上运行的机器。

请注意,有一些Autootols错误需要同时指定--build--host。这是另一个Autotools问题,从未得到解决。

另请参阅Autools手册中的2.2.8,交叉编译。

您仍然需要正确地获取路径和sysroot,但这应该提供正确的configure命令,这样事情就会像预期的那样开始失败。


config.guess将为您正在运行自动工具的机器返回一个三元组:

$ find /usr/share/ -name config.guess
/usr/share/libtool/build-aux/config.guess
...
$ /usr/share/libtool/build-aux/config.guess
x86_64-pc-linux-gnu

如果您发现软件包有一个,但它已经过期,您可以使用以下命令更新它。您通常需要为AIX和Solaris计算机执行此操作。

wget 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess' -O config.guess

你可以用同样的方式更新config.sub

wget 'https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub' -O config.sub

最新更新