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

C++ 交叉编译器二进制执行错误,c++,compiler-construction,linker,cross-compiling,C++,Compiler Construction,Linker,Cross Compiling,我刚刚使用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% ./h

我刚刚使用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.
值得注意的是,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.
testhello:C编译器实际上可以构建一个简单的程序


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

您是否在编译代码的同一台计算机上运行“/hello”?如果您在windows上,并且交叉编译了linux程序,您是否希望新的linux程序在windows下运行?这种情况其实没有什么不同。。。(如果你这样做了,那么你需要问一个更抽象的问题)是的,我在同一台机器上运行它,也许我有点困惑,我的目标是在我的linux机器上编译一个程序,这样我就可以反汇编elf文件并将其加载到我构建的mips模拟器中。因此,elf文件应该是MIPS elf文件。我可以看到在linux机器上哪里可能不会执行,但是我该如何测试编译器是否正常工作以及编译的二进制文件是否正常工作?请记住,我的mips模拟器正在测试中,目前还不能用于此类验证。您可以使用-S查看程序集输出,或将其运行到其他人的mips模拟器。还有一点很好,是否有人知道我如何验证编译中未使用共享库?我断言了静态libgcc,这足够了吗?对,我意识到了这一点。幸运的是,我有SESC来运行MIPS代码。