Как отмечено в этом сообщении в блоге и упоминается в Условиях настройки GCC , --target
применяется только при компиляции цепочек инструментов. Когда вы делаете обычную кросс-компиляцию библиотеки или двоичного файла, вы используете
--build=the architecture of the build machine
--host=the architecture that you want the file to run on
Однако, когда вы создаете цепочки инструментов, все может стать более сложным. Я думаю, что следующее правильно (хотя я не могу сказать, что когда-либо вручную компилировал кросс-отладчик):
Допустим, у вас есть:
- машина для сборки powerpc, на которой вы собираетесь выполнять всю компиляцию
- несколько встроенных устройств с процессорами mips, на которых ваш код будет работать
- ноутбук x86, который вы собираетесь использовать для отладки этих устройств в полевых условиях
Вы настроите и создадите свой сервер отладки (например, gdbserver) для работы на встроенном устройстве с
./configure --build=powerpc --host=mips
, чтобы вы могли замазать ваше встроенное устройство и запустить "gdbserver: 1234 a.out", чтобы начать отладку и прослушивать порт 1234.
Затем вы создадите клиент отладки (который подключается к gdbserver и управляет им) с помощью
./configure --build=powerpc --host=i686 --target=mips
, который вы бы скопировали на свой ноутбук x86, чтобы в поле вы могли запустить «gdbclient embedded.device: 1234» для отладки вашей программы a.out.
Это все относится и к компиляторам, для которых вы можете посмотреть ссылку GCC выше или этот раздел о канадской кросс-компиляции .
Также обратите внимание, что на практике вы можете не видеть указанную сборку, хост или цель, потому что, согласно этой странице руководства Autoconf , "target по умолчанию - хост, хост для сборки и сборка с результатом config.guess. "
Одним словом, соберите код на --build
, запустите его на --host
с --target
средой архитектуры.