Ошибка двоичного выполнения кросс-компилятора - PullRequest
1 голос
/ 15 июля 2010

Я только что создал кросс-компилятор, используя 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.

1 Ответ

3 голосов
/ 23 июля 2010

Как примечание, crosstools сказал, что может запустить тривиальную программу:

testhello: компилятор C на самом деле может собрать тривиальную программу.

Когда вы выполняете кросс-компиляцию для другой архитектуры, вы генерируете инструкции для новой архитектуры, и, следовательно, вы не сможете выполнить эти инструкции для вашей текущей архитектуры. Вы выполняете кросс-компиляцию, чтобы иметь возможность скомпилировать код на более мощной машине и затем передать его на устройство для тестирования. Если вы хотите протестировать код непосредственно на вашем компьютере, вам нужно скомпилировать его с компилятором вашей нативной архитектуры.

...