2010-07-15 102 views
1

我刚刚使用crosstools“mips-unknown-linux-gnu-gcc”构建了交叉编译器,并编译了一个hello世界程序。编制了罚款使用命令:“MIPS-未知Linux的GNU-G ++ HELLO.CPP -o你好”,但是当我运行命令“./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. 
+2

你在编译它的同一台机器上运行“./hello”吗? – 2010-07-15 19:48:26

+0

如果你在windows上并且为Linux交叉编译一个程序,你是否期望你的新Linux程序能够在windows下运行?这种情况并没有什么不同......(如果你这样做,那么你需要提出一个更抽象的问题) – Cogwheel 2010-07-15 19:50:54

+0

是的,我在同一台机器上运行它,也许我有点困惑,我的目标是在我的linux机器上编译一个程序,然后我可以反汇编elf文件并将其加载到我构建的mips模拟器中。所以这个elf文件应该是一个MIPS精灵文件。我可以看到那些不能在linux机器上执行的地方,但是我该如何测试编译器是否正常工作以及编译后的二进制文件是否工作正常?请记住,我的mips模拟器现在正在测试中,不能用于此类验证。 – 2010-07-15 19:57:09

回答

3

Just as a note, crosstools did say it could run a trivial program:

testhello: C compiler can in fact build a trivial program.

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

+0

对,我意识到这一点。幸运的是我有SESC来运行MIPS代码。 – 2010-07-23 20:19:52