交叉编译器二进制执行错误

问题描述 投票:0回答:1

我刚刚使用 crosstools“mips-unknown-linux-gnu-gcc”构建了一个交叉编译器,并编译了一个 hello world 程序。 使用命令“mips-unknown-linux-gnu-g++ hello.cpp -o hello”编译顺利,但是当我运行命令“./hello”时,出现以下错误:

babbage-dasnyder 50% mips-unknown-linux-gnu-g++ hello.cpp -o hello
babbage-dasnyder 51% ./hello
./hello: Exec format error. Wrong Architecture.

这是为什么呢? 我是否制作了错误的交叉编译器? 我在 Linux 机器上运行这个。

请注意,crosstools 确实说它可以运行一个简单的程序:

+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc -static hello.c -o mips-unknown-linux-gnu-hello-static
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-gcc hello.c -o mips-unknown-linux-gnu-hello
+ test -x /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++
+ cat
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ -static hello2.cc -o mips-unknown-linux-gnu-hello2-static
+ /home/seas/grad/dasnyder/opt/crosstool/gcc-3.4.5-glibc-2.3.6/mips-unknown-linux-gnu/bin/mips-unknown-linux-gnu-g++ hello2.cc -o mips-unknown-linux-gnu-hello2
+ echo testhello: C compiler can in fact build a trivial program.
testhello: C compiler can in fact build a trivial program.
+ test '' = 1
+ test '' = 1
+ test '' = 1
+ test 1 = ''
+ echo Done.
Done.
c++ gcc linker cross-compiling
1个回答
3
投票

请注意,crosstools 确实说它可以运行一个简单的程序:

testhello:C 编译器实际上可以构建一个简单的程序。

当您交叉编译到不同的架构时,您正在为新架构生成指令,因此您可能无法在当前架构上运行这些指令。您进行交叉编译是为了能够在功能更强大的机器上编译代码,然后将其传输到设备上进行测试。如果您想直接在您的计算机上测试代码,您需要使用本机架构的编译器进行编译。

© www.soinside.com 2019 - 2024. All rights reserved.