2015-06-05 4 views
2

Я хотел начать кросс-компиляцию для малины pi2 на 32-битной Ubuntu (в виртуальной коробке), поэтому я загрузил toolchain на сайт github (https://github.com/raspberrypi/tools) и попытался скомпилировать простую мирную программу hello с команда (я включил путь к папке, содержащей бен рычажного линукс-gnueabihf-GCC-4.8.3 переменной PATH.):Перекрестное компиляция для Raspberry pi 2 error

arm-linux-gnueabihf-gcc-4.8.3 HelloWorld.c 

Однако, я всегда получаю следующее сообщение об ошибке:

path/to/the/linker/in/the/toolchain/ld:/path/to/the/libc.so.6file/in/the/toolchain/libc.so.6: file format not recognized; treating as linker script 

и последующая ошибка синтаксиса. Когда я смотрю в libc.so.6, я вижу одну строку, содержащую:

libc-2.13.so 

libc-2.13.so файл присутствует в той же папке, что и файл libc.so.6. Когда я призываю

file libc-2.13.so 

я получаю:

libc-2.13.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=dbd0cdca5a677bea1417be1272f4c5ef43bd3e22, for GNU/Linux 2.6.26, stripped 

Я не знаю, что может привести к этой ошибке, так как очевидно, линкер из инструментария, и файла libc.so.6 с инструментария, обрабатывается поэтому формат файла должен быть распознан, не так ли? Может кто-нибудь указать мне в правильном направлении здесь? Благодаря!

+0

Я думаю, что вам не хватает пути к ссылке, поэтому компоновщик пытается связать libc вашей системы, а не с инструментальными цепочками. Попробуйте добавить опцию -L' для указания библиотек инструментальной цепочки. – Mine

+0

Привет, спасибо за ваш комментарий! Я пробовал флаги -I и -L в соответствующих местах toolchain (libc/lib и include) и все еще получил ту же ошибку ... Однако, поскольку я включил toolchain в качестве первого места в PATH, он уже принял правильный файл libc.so (путь к файлу libc также включен в сообщение об ошибке) Есть ли у вас дополнительные предложения? – KO70

+0

Скомпилируйте с опцией -v, чтобы увидеть используемую команду компоновщика. –

ответ

3

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

Теперь вы делаете для ARM-RPi, но завтра, если ваш целевой ЦП изменится, будет очень легко снова перенастроить инструментальную цепочку.

Вы можете найти простые шаги, указанные в this article. Надеюсь, это сработает для вас.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Shadwell

+0

@Shadwell: Я новичок в этом форуме. Я отредактировал свой ответ. Не могли бы вы рассказать мне, это хорошо? –

+0

Да, это лучше. Возможно, добавьте ссылку на http://crosstool-ng.org/. – Shadwell

1

В моем первом усилии мне пришлось включить путь к gcc в команде. Затем я просто скомпилировал программы на RPi.

~/toolchain/raspbian-toolchain-gcc-4.7.2-linux32/bin/arm-linux-gnueabihf-gcc whets.c 
+0

Привет! Я пытался предоставить абсолютные пути при компиляции (я также пробовал это с абсолютным путем в пределах -I и -L), но все же: та же ошибка ... но спасибо за ваш ответ в любом случае! – KO70

1

When I look into libc.so.6, I see a single line containing: libc-2.13.so

Я просто побежал в это. Проблема проста, чем вы думаете. Когда вы отключили и отключили инструментальную цепочку, произошло то, что libc.so.6 стал текстовым файлом. Предполагается, что это файл «символической ссылки», указывающий на правильный файл «libc-2.13.so».

Если вы используете окна и 7-Zip, не забудьте нажать «Запустить AS Administrator» при запуске 7-zip. Если вы просто перетаскиваете, ошибка не так очевидна.

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