Заставить gcc компилировать 32-битные программы на 64-битной платформе
У меня есть собственная программа, которую я пытаюсь использовать на 64-битной системе.
когда я запускаю установку, она работает нормально, но после того, как она пытается обновить себя и скомпилировать некоторые модули, и она не может их загрузить.
Я подозреваю, что это потому, что он использует gcc и gcc пытается скомпилировать их для 64-битной системы, и поэтому эта программа не может использовать эти модули.
есть ли способ (некоторые переменные среды или что-то в этом роде) заставить gcc сделайте все для 32-битной платформы. Будет ли 32-битный chroot работать?
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