получение ./configure для построения 32-битного кода на 64-битной linux - PullRequest
0 голосов
/ 02 мая 2020

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

Я выяснил, как построить мое приложение как 32-битную цель, используя -m32 (со всеми установленными необходимыми пакетами). Но когда я хочу создать ссылку в сторонней библиотеке BSD, мне нужно принудительно ./configure собрать ее в 32-битном режиме. Я нашел это решение, которое частично работает:

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

Но оказалось, что LDFLAGS не передается в 'ar', поэтому он завершился неудачей на этапе загрузки библиотеки. Я смог «исправить» это, отредактировав Makefile вручную, но должен быть лучший способ, не так ли?

Другие предлагали специально установить CC, CXX и LD, чтобы указать на c 32-битные двоичные файлы:

CC="/path/to/c/compiler/gcc-x86" CXX="path/to/cpp/compiler/g++-x86" LD="path/to/linker/ld-x86" ./configure

Я предполагаю, что это сработает, но меня удивляет, есть ли способ установить для среды сборки системы по умолчанию 32-битный режим или, что лучше, способ установите переменную окружения, чтобы выбрать режим сборки «глобально» на лету. Если нет, может быть, должно быть ... Я думаю, может быть, сценарий 'config32' мог бы быть установлен для запуска ./configure с установленными переменными компилятора. Но это не сработает для других уже существующих make-файлов. Глобальный параметр, чтобы ./configure просто сталкивался с 32-битной средой сборки, был бы идеальным решением, не так ли?

На самом деле, я попытался найти 32-битные бинарные файлы g cc в моей системе, и они кажутся быть хорошо скрытым или не существующим. Возможно ли, чтобы флаг -m32 обрабатывался внутренне двоичным файлом / usr / bin / x86_64- linux -gnu-g cc, а не передавал компиляцию другому двоичному файлу для компиляции в 32-битный код? Я вижу каталог / user / lib / i686- linux -gnu, но он пуст. И есть подкаталог '32' в / usr / lib / x86_64- linux -gnu. Так что, по крайней мере, некоторые 32-битные файлы хранятся как часть 64-битной установки. Тем не менее, не могу найти двоичные файлы.

...