GDB не может кросс-компилировать для arm-linux - PullRequest
0 голосов
/ 01 февраля 2019

В 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

Итак, как указать правильный CC для GDB?

Я попытался 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

1 Ответ

0 голосов
/ 01 февраля 2019
./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, которая никогда не была устранена.

Также см. 2.2.8, Кросс-компиляция в руководстве по Autools.

Вам все равно нужно получитьпути и sysroot правильные, но это должно обеспечить правильную команду настройки, чтобы все начинало сбоить, как и ожидалось.


config.guess вернет триплет для машины, на которой вы запускаете Autotools:

$ 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
...