Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > сборка кросс-платформенным компилятором Си модули


Автор: gcc 23.7.2009, 01:56
есть программа perl +C как только я компилирую включается мой компилятор (СИ модули я не писал, но они входят в программу)

подскажите какие есть идеальный и максимальный вариант собрать кросс-платформенно Си модули чтобы они работали на всех платформах и на извесном (многом) аппаратном обеспечении?? для удобства!

нужно разделить win, linux, freebsd? или win и unix? или как-то еще?

если есть ссылка, то покажите! я нифига в гугле не нашел...

(хотелось бы получить полный ответ, что куда и зачем ставить... )

http://forum.vingrad.ru/forum/topic-267024.html

Автор: MAKCim 23.7.2009, 08:35
posix и не-posix
большинство unix'ов следуют определеным версиям posix, поэтому интерфейс использования большинства системных функций в общем то одинаков
поэтому win и unix + #if[n]def...#define...#endif

Автор: gcc 23.7.2009, 18:07
как железо? я думал что надо под железо еще собирать, мне сказали надо биндить под железо

если у меня i386 FreeBSD, на хостинге/сервер HP FreeBSD или SUN FreeBSD, если я соберу на i386, будут ли Си модули на HP или на SUN работать? может нужно какую-то оптимизацию поставить? 

компилятор который в FreeBSD по-умолчанию кросс-платформенно компилирует под всю извесную (многою) архитектуру железа (серверную) ?

Автор: xvr 24.7.2009, 11:38
Цитата(gcc @ 23.7.2009,  18:07)
как железо? я думал что надо под железо еще собирать, мне сказали надо биндить под железо

Да
Цитата

если у меня i386 FreeBSD, на хостинге/сервер HP FreeBSD или SUN FreeBSD, 
HP (да и SUN) - это такие фирмы. А сервера они делают разные  smile Если они окажутся на чем то x86 - то может быть и запустится, если на чем то другом, то совершенно точно НЕ запустится
Цитата

компилятор который в FreeBSD по-умолчанию кросс-платформенно компилирует под всю извесную (многою) архитектуру железа (серверную) ?
Нет. Ни по умолчанию, ни в принудительном порядке, никак. Для кросс компиляции нужен конкретный КРОСС компилятор на конкретную платформу.

Автор: gcc 24.7.2009, 22:35
Цитата(xvr @ 24.7.2009,  11:38)
Для кросс компиляции нужен конкретный КРОСС компилятор на конкретную платформу.

я именно это и спрашиваю... и какое название этого компилятора?
(в гугле ничего не нашел)

как это сделать?

кроме меня никто не делал? дайте информацию как это сделать... (я тоже знаю что нужен компилятор, только какой и как это сделать никто не знает)

Автор: powerfox 25.7.2009, 11:37
Цитата(gcc @  23.7.2009,  02:56 Найти цитируемый пост)
нужно разделить win, linux, freebsd? или win и unix? или как-то еще?

GCC (не вы, а компилятор ;) ) поддерживает довольно большое число архитектур. С его помощью можно скомпилировать программу и для x86, и для какого-нибудь RISC. Сделать, чтобы один и тот же исполняемый файл работал везде просто невозможно.
Т.к. у Linux, у FreeBSD и у Windows разный формат исполняемых файлов, то даже кроссплатформенную программу нужно собирать для каждой из ОС. 
man gcc, или поиск по "crosscompilation gcc".

Цитата(gcc @  23.7.2009,  02:56 Найти цитируемый пост)
(хотелось бы получить полный ответ, что куда и зачем ставить... )

Самый полный ответ находится в книгах по архитектуре компьютера.


Автор: gcc 9.8.2009, 18:08
извините, я не нашел...

по этому запрпосу "crosscompilation gcc" (и аналогичных) я нашел только списки рассылки в котором задаються некоторые вопросы... но там не написано, может я что-то не понял, но как это сделать? что написать компилятору? или это не реально...?
(СС который по умолчанию в FreeBSD это и есть gcc, если я праивльно понял )

Автор: powerfox 9.8.2009, 18:33
gcc, при компиляции и компановке программы учитывается несколько параметров системы:
  •  Архитектура процессора (т.е. набор команд, которые он поддерживает).
  •  Формат испольняемого файла (зависит от ОС).
  •  Зависимости библиотек (зависит от того, что установлено в системе). По крайней мере нужна libc.
    ...

Именно поэтому не существует кроссплатформенных компилируемых программ.

Цитата(gcc @  9.8.2009,  19:08 Найти цитируемый пост)
по этому запрпосу "crosscompilation gcc" (и аналогичных) я нашел только списки рассылки в котором задаються некоторые вопросы...

Плохо искали ;)

http://wiki.osdev.org/GCC_Cross-Compiler
http://en.wikipedia.org/wiki/Cross_compiler
http://www.airs.com/ian/configure/configure_5.html
http://gcc.gnu.org/wiki/Building_Cross_Toolchains_with_gcc
...

Автор: xvr 9.8.2009, 21:55
Цитата(gcc @ 9.8.2009,  18:08)
что написать компилятору?

Ничего. Кросс компилятор - это не тот gcc, который компилирует для ОС, в которой он работает, это ДРУГОЙ компилятор
Цитата

(СС который по умолчанию в FreeBSD это и есть gcc, если я праивльно понял )
Да, это gcc, но это не кросс компилятор.
Сам gcc собирается с сорцов любым С компилятором (например уже готовым gcc). В дереве сорцов gcc есть куски, расчитанные на многие разные архитектуры. Когда gcc компилируется его make файл (грубо говоря) определяет на какой ОС он запущен и подставляет соответствующие аппаратно и ОС зависимые куски.
Таким образом, gcc собранный на x86 Linux'е будет генерировать ELF файлы с коммандами для x86
Но это автоматическое определение железа и ОС можно отключить и задать эти параметры явно, с командной строки make файлу
При этом сам полученный gcc будет работать на той платформе, на которую его откомпилирует тот самый 'любой С компилятор', но код и файлы будет генерировать на ту платформу, которую явно задали make файлу. 
Это и будет кросс компилятор

Стоит добавить, что одного кросс компилятора мало. Еще нужны будут кросс binutil (ассемблер, линкер и пр) и библиотеки для целевой платформы (они уже не кросс, а самые настоящие 'чужие' библиотеки)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)