使用最新的cross_compiler运行简单的hello world程序时得到非法指令

时间:2018-05-31 14:46:41

标签: linux arm cross-compiling

大家。 我使用了最新的cross_compiler(在Ubuntu 18.04上安装了sudo apt install gcc-arm-linux-gnueabi,版本是7.3)来编译一个简单的“hello world”c程序

#include <stdio.h>

int main()
{
    printf("Hello World!\r\n");
    return 0;
}

使用下面的命令编译代码,我使用静态链接

arm-linux-gnueabi-gcc -o hello hello.c -static

然后我首先在我的覆盆子pi0w上运行它,它运行得非常好 之后,我在我的s3c2440主板上运行它,这是ARM9和非常老的内核。但是,它没有正确运行。

# ./hello
Illegal instruction

我不知道为什么,以及如何解决它。然后我使用了cross_compiler版本3.4.5再次编译它,这次程序运行顺利。但是在运行程序后,它无法在raspberry pi上正常运行,什么都没发生。“Hello World!”没出现。

我用 file 命令检查这两个程序(不知道是否有帮助): 最新编译器编译的程序是:

hello: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=6b0a4b6cb4bf672d4cf1fbd171ec62a96e622d69, not stripped

和旧编译器是:

hello_old: ELF 32-bit LSB executable, ARM, version 1 (ARM), statically linked, for GNU/Linux 2.4.3, with debug_info, not stripped

最新的arm-linux-gnueabi-gcc是

$ arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/arm-linux-gnueabi/7/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 7.3.0-16ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --with-as=/usr/bin/arm-linux-gnueabi-as --with-ld=/usr/bin/arm-linux-gnueabi-ld --program-suffix=-7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --with-target-system-zlib --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-arch=armv5t --with-float=soft --disable-werror --enable-multilib --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 7.3.0 (Ubuntu/Linaro 7.3.0-16ubuntu3)

我使用的旧的cross_compiler是

$ arm-gcc-old -v
Reading specs from /work/gcc-3.4.5-glibc-2.3.6/bin/../lib/gcc/arm-linux/3.4.5/specs
Configured with: /work/tools/create_crosstools/crosstool-0.43/build/arm-linux/gcc-3.4.5-glibc-2.3.6/gcc-3.4.5/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/work/tools/gcc-3.4.5-glibc-2.3.6 --with-float=soft --with-headers=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/include --with-local-prefix=/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.5

如何使用最新的编译器正确编译代码? s3c2440上的内核是

# uname -a
Linux (none) 2.6.22.6 #1 Thu May 31 14:02:09 CST 2018 armv4tl unknown

该内核由最新的cross_compiler 7.3

编译

谢谢!

0 个答案:

没有答案