У меня GCC 4.7.2 и OS X 64 bit. Я хочу создать исполняемый файл exe
файл из main.cpp
для моего друга с Ubuntu 32 бит. Я пробовал с $ g++ main.cpp -o exe
но он говорит, что это не работает, потому что я скомпилировал для 64 бит.
Как я могу скомпилировать его для 32 бит?
Твой друг не прав. Вполне может быть и так, что у него есть 32-битная машина, и вы создали 64-битные исполняемые файлы, но даже если вы скомпилировали для 32-битной (что делается путем компиляции и связывания с -m32
) есть много других причин, которые все еще не будут работать. Mac OS X и Ubuntu — совершенно разные системы и код, скомпилированный за одну не беги по другому.
Любая отдельная сборка GCC может генерировать код только для одной цели, то есть для одной комбинации процессора и операционной системы. GCC в вашей системе предназначен для Mac OS X, т.е. это собственный компилятор, то есть он генерирует код для той же системы, на которой работает.
Чтобы сгенерировать исполняемые файлы для Ubuntu, вам нужна другая сборка GCC, построенная с чем-то вроде --target=i686-unknown-linux-gnu
, Если этот GCC работает на вашем Mac, то это будет кросс-компилятор, это означает, что он работает в одной системе, но генерирует код для системы другого типа.
Чтобы установить и использовать кросс-компилятор, вам также понадобятся все библиотеки C для кросс-цели, поэтому вам нужно будет получить копии исходных кодов glibc и собрать их на своем Mac, используя кросс-компилятор. Это довольно сложно, но есть такие проекты, как crosstool
а также crosstool-NG
которые пытаются упростить его, предоставляя скрипты для выполнения работы.
Было бы намного проще настроить виртуальную машину на вашем Mac и установить Ubuntu в виртуальной машине, а затем использовать собственный GCC из Ubuntu для компиляции исполняемых файлов для Ubuntu.
Вашему другу было бы еще проще apt-get install gcc
и сам скомпилировать исходный код.
Других решений пока нет …