скомпилировать простую программу hello-world c для mips netbsd

На прошлой неделе я пытался настроить компилятор, который может компилироваться в netbsd с архитектурой mips.

Я не могу найти ничего в Интернете, как это сделать. Все документы относятся к компиляции ядра в архитектуру, но не в программы.

Как это может быть так сложно....

хост - машина netbsd amd64


person John Smith    schedule 02.06.2014    source источник
comment
Кросс-компиляция с какого именно хоста?   -  person Kuba hasn't forgotten Monica    schedule 02.06.2014
comment
машина amd64 работает что? Я имею в виду, да ладно, не усложняй.   -  person Kuba hasn't forgotten Monica    schedule 02.06.2014
comment
netbsd, извините, я просто очень расстроен тем, что то, что кажется таким простым, вообще плохо документировано   -  person John Smith    schedule 02.06.2014
comment
Где вы взяли набор инструментов? Вы его сами скомпилировали (если да, то как настроили)? Как выглядит make-файл для вашей программы hello world?   -  person Michael    schedule 02.06.2014
comment
Вы сами создали образ NetBSD/mips для целевой машины на хосте разработки NetBSD/amd64?   -  person Greg A. Woods    schedule 05.06.2014
comment
Я создал образ netbsd для mips64el из amd64. У меня есть mips64el--netbsd-gcc в папке инструментов, однако запуск вызывает огромные ошибки.   -  person John Smith    schedule 06.06.2014
comment
Вам не обязательно запускать компилятор вручную - вам нужно будет правильно настроить все параметры. Вместо этого попробуйте сделать это после того, как сначала выполните кросс-сборку NetBSD, чтобы убедиться, что ваши TOOLDIR и DESTDIR обновлены. Напишите небольшую программу или украдите ее (например, mkdir ~/mytest && cp /usr/src/cat/* $HOME/mytest && cd $HOME/mytest). Поместите TOOLIR в свой путь (после того, как поместите его в свою среду): PATH=$TOOLDIR:$PATH И затем, наконец, попробуйте выполнить кросс-компиляцию вашей тестовой программы: nbmake-mips64el dependall Если это не сработает, ОТПРАВЬТЕ ВСЕ, чтобы показать, что вы сделали. и не делал!   -  person Greg A. Woods    schedule 19.06.2014


Ответы (2)


Установите компилятор соответствующим образом. Укажите версию gcc в вашем TOOLDIR. В этом случае что-то вроде mips--netbsd-gcc. Обязательно убедитесь, что TOOLDIR находится на вашем пути, чтобы драйвер мог найти правильный ассемблер, правильный загрузчик и правильные библиотеки.

Взгляните на Makefile в любом из src/bin/* в качестве примера и прочитайте системные mk include-файлы, на которые есть ссылки (в src/share/mk)

person Eric Schnoebelen    schedule 02.06.2014
comment
И в этом проблема. что означает установка компилятора? У меня есть mips64el--netbsd-gcc в моем каталоге инструментов, но если я использую его, я получаю огромные ошибки. вероятно, потому что я неправильно настроил компилятор... похоже, просмотр /usr/src/share/mk не дает мне никаких подсказок. Я понятия не имею, что все это значит. Я никогда не работал с компиляторами такого уровня - person John Smith; 02.06.2014
comment
Я думаю, это предполагает, что OP уже выполнил кросс-компиляцию NetBSD/mips для целевой машины с хоста разработки, но неясно, что было сделано. - person Greg A. Woods; 05.06.2014

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

Предполагая, что вы собираете все из исходного кода, это выглядит следующим образом:

  1. Выберите префикс для цепочки инструментов (скажем, /opt/mips) и другой префикс для корневой файловой системы цели (скажем, /opt/target). Все они находятся на вашей машине разработки, а не на цели!

  2. Настройте, соберите и установите кросс-компилятор для вашей цели. Это входит в префикс цепочки инструментов.

  3. Настройте, создайте и установите ядро для вашей цели в префикс целевого корня. Это должно установить необходимые заголовки разработки ядра, необходимые позже. Если вы можете установить такие заголовки без компиляции ядра, конечно, вам больше сил.

  4. Настройте, соберите и установите библиотеку C (скажем, glibc) для вашей цели в целевой корень.

  5. Сконфигурируйте, создайте и установите любые другие библиотеки, которые нужны вашему пользовательскому приложению, в целевой корень.

  6. Наконец, настройте, создайте и установите пользовательское приложение. После установки в целевой корень вы можете скопировать его в целевой с тем же префиксом (скажем, /opt/target, как было предложено ранее).

    Как правило, для установки в другой префикс — тот, который перекрывает вещи на вашем хосте сборки (например, /usr) — вам нужно будет сделать несколько трюков, чтобы обмануть make install и увидеть целевой префикс вместо вашего собственного. Простым подходом было бы иметь среду chroot на вашем хосте сборки, где вы можете связать префикс (скажем, /usr) только для чтения с доступным для записи файлом (mount_union) поверх него.

Когда вы создаете материал для цели, вам, конечно, нужно передать правильные аргументы в configure.

person Kuba hasn't forgotten Monica    schedule 02.06.2014
comment
Это будет работать, но это определенно не намного более простой способ NetBSD делать что-то, тем более что OP уже запускает NetBSD на хосте разработки (хотя это не имеет большого значения, поскольку NetBSD может быть кросс-компилирована из большинства любых хороших POSIX -совместимый хост, поэтому его набор инструментов и библиотеки кросс-компилятора также могут быть кросс-компилированы практически с любого хорошего POSIX-совместимого хоста). - person Greg A. Woods; 05.06.2014
comment
Итак, что это за гораздо более простой способ работы с NetBSD? Как ты собираешься это сделать, не имея целевого рута? Конечно, целевой корень можно получить из самой целевой системы (дух), но что еще мне не хватает? - person Kuba hasn't forgotten Monica; 06.06.2014
comment
Поскольку исходное дерево NetBSD может быть построено на любом хосте POSIX, это означает, что он обязательно может также построить кросс-компилятор и все необходимые библиотеки для целевой системы (и установить все эти библиотеки и связанные с ними файлы заголовков в каталог, где набор инструментов можно ими пользоваться). Как только это будет сделано, все, что вам нужно сделать, это поместить получившийся $TOOLDIR в ваш путь и использовать оттуда скрипт-оболочку make (nbmake-$MACHINE) для кросс-компиляции любого другого кода (конечно, используя BSD Makefiles). Ведь именно так кросс-компилируется остальная часть ОС. - person Greg A. Woods; 06.06.2014