LINUX.ORG.RU

вопрос по Cygwin: как указать target?


0

0

Специалисты! Кто юзал cygwin под win32: какой опцией выставляется target platform? Надо собрать консольную прогу под freebsd, соответственно в формате ELF. Прога компилируется и линкуется в win32-приложение, использующее cygwin.dll. Как заставить компилятор/линкер генерить код для FreeBSD? Заранее спасибо.

anonymous

Есть небольшая проблема. Естественно, при помощи Cygwin можно
собирать программы для других платформ.
Однако, за это отвечает не сам Cygwin, а компилятор и т.п.
По умолчанию (и тут не помогут ключи) он собирает файлы
для родной платформы (в данном случае Cygwin).
Соответственно, например, формат может быть COFF.
В Ващем случае дело даже не в формате:
1. Для того, чтобы заставить работать программу на другой платформе
необходимо, чтобы при компиляции использовались include-файды для
этой платформы.
2. Include-файлы обычно не настроены точно на одну платформу.
В них имеется огромное количество ifdef и т.п. для подстройки.
Компилятор должен выдавать заранее установленные переменные для
нужной платформы. Cygwin-компилятор будет это делать для себя.
Что-то надо менять.
3. В общем случае, даже на одной аппаратной платформе, в
ОС, существуют различные конвенции передачи параметров,
выделения памяти, запись программ на ассемблере может по этим
причинам отличаться (и gcc должен генерировать различный код).
4. Сам gas уже должен генерировать корректные объектные файлы (ELF).
5. Как вы правильно заметили, формат файлов должен быть другой,
да и библиотеки, инициализационные файлы для сборки надо взять
другие (с BSD).
6. Нужно не только сменить формат, но и выполнить другие требования
по размещению данных процесса в адресном пространстве другой ОС.
По умолчнию этого не будет. Как минимум нужен специальный скрипт
для ld (elf-то он, кажется, в CYGWIN-поддерживает).

Короче, нужны слегка другие средства для работы.
У меня на каждую платформу свои, со своим набором include,
gcc, gas, ld, библиотеками и т.п.
Можно делать multitarget, но не всегда.

io ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.