2015-09-25 5 views
0

У меня Ubuntu 12.01 с gcc 4.8.2 и сделал кросс-компиляцию для Vortex86DX-процессора, работающего под старым ядром 2.6.23.Vortex86DX Нелегальная инструкция по коду C++/toolchain build

я пытаюсь следующий код тестирования:

#include <iostream> 

int main() 
{ 
    std::cout << "Hello world" << std::endl; 
} 

Это скомпилирован с помощью следующей командной строки:

g++ -march=i586 test.cpp -o test586 -static -static-libgcc -static-libstdc++ 

Когда я бегу test586 на целевой архитектуре I'm получаю эту погрешность:

$ ./test586 
Illegal instruction 

Ну, как указано here, это означает, что я необходимо построить всю инструментальную цепочку для данной архитектуры, но я действительно запутался в том, как это сделать:

A) Поскольку я использую Ubuntu 12.01, он построен для архитектуры i686. Должен ли я построить новую инструментальную цепочку в этом Ubuntu? Должен ли я построить виртуальную машину с более старым Ubuntu и скомпилировать ее (для меня это проблема, так как мне нужна поддержка C++ 00x-C11, а Ubuntu, например, 10.X gcc ее не поддерживает).

b) Я не могу построить целевое оборудование, так как у него очень мало памяти и диска (256 Мб ОЗУ) и очень старое ядро ​​Linux 2.6.23.

Я действительно очень смущен тем, как это решить, и помощь приветствуется. here

+0

Какова инструкция, на которую она жалуется? – harold

+0

Вы перестанете добавлять тег C для кода на C++? – Olaf

+0

harold, как я могу это узнать? – Mendes

ответ

0

Это связано с тем, что ваш libstdC++ связан как версия i686, которая несовместима с вихревой платформой. Когда вы переключаетесь на динамическую привязку (которая включена по умолчанию), ваш пример будет работать отлично.

Смежные вопросы