代码之家  ›  专栏  ›  技术社区  ›  JustWe

gdb不能为arm linux交叉编译

  •  1
  • JustWe  · 技术社区  · 5 年前

    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
    
    1 回复  |  直到 5 年前
        1
  •  2
  •   jww    5 年前
    ./configure --target=arm-none-linux-gnueabi --host=i386-redhat-linux -v
    

    不要使用 --target . 这意味着自动工具还有其他功能。

    使用 --build --host . 类似:

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

    --建造 应指定正在运行自动工具的计算机,以及 ——主持人 应指定运行包的计算机。

    注意,有些Autootols错误要求您同时指定 --建造 ——主持人 . 这是另一个从未解决的自动工具问题。

    也看到 2.2.8, Cross-Compilation 在自动工具手册中。

    您仍然需要获得路径和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