Подтвердить что ты не робот

Синтаксис gcc для компиляции 32-битных программ на 64-битной платформе

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

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

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

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

4b9b3361

Ответ 1

Вам нужно, чтобы GCC использовал флаг -m32.

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

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

Ответ 2

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

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

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

sudo apt-get install gcc-multilib 

Ответ 3

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

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

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

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