Заставить gcc компилировать 32-битные программы на 64-битной платформе



У меня есть собственная программа, которую я пытаюсь использовать на 64-битной системе.



когда я запускаю установку, она работает нормально, но после того, как она пытается обновить себя и скомпилировать некоторые модули, и она не может их загрузить.



Я подозреваю, что это потому, что он использует gcc и gcc пытается скомпилировать их для 64-битной системы, и поэтому эта программа не может использовать эти модули.



есть ли способ (некоторые переменные среды или что-то в этом роде) заставить gcc сделайте все для 32-битной платформы. Будет ли 32-битный chroot работать?

737   3  

3 ответов:

вы должны сделать GCC использовать -m32 флаг.

вы можете попробовать написать простой сценарий оболочки для вашего $PATH и назовите его gcc (убедитесь, что вы не перезаписываете исходный gcc, и убедитесь, что новый скрипт приходит раньше в $PATH, и что он использует полный путь к GCC.

Я думаю, что код вам нужно, это просто что-то вроде /bin/gcc -m32 $* в зависимости от вашей оболочки (тег $* тут можно указать все аргументы, хотя это может быть что-то еще – очень важно!)

вы можете получить 32-разрядный двоичный файл, применив метод Алана пирса, но вы также можете получить следующие ошибки:

fatal error: bits/predefs.h: No such file or directory

Если это так и если у вас есть apt-get, просто установите gcc-multilib

sudo apt-get install gcc-multilib 

для любого кода, который вы компилируете непосредственно с помощью gcc/g++, вам необходимо добавить -m32 опция в командной строке компиляции, просто отредактируйте свой CFLAGS,CXXFLAGS и LDFLAGS переменные Makefile.

для любого стороннего кода, который вы можете использовать, вы должны убедиться, когда вы его создаете, чтобы настроить его для кросс-компиляции. Беги ./configure --help и посмотреть, какие опции доступны. В большинстве случаев вы можете предоставить свой CFLAGS,CXXFLAGS и LDFLAGS переменные скрипт configure. Вам также может потребоваться добавить --build и --host чтобы настроить скрипт так что вы в конечном итоге с чем-то вроде

./configure CFLAGS=-m32 CXXFLAGS=-m32 LDFLAGS=-m32 --build=x86_64-pc-linux-gnu --host=i686-pc-linux-gnu

если компиляция не удается это, вероятно, означает, что вам нужно установить некоторые 32-битные пакеты разработки на 64-битной машине

Comments

    Ничего не найдено.