Как создать 32-разрядные двоичные файлы с помощью Red Hat Developer Toolset? - PullRequest
0 голосов
/ 14 февраля 2020

Я не могу найти никакой документации о том, как настроить 32-битный режим с помощью Red Hat Developer Toolset (версия 9.0 в данном случае работает на CentOS 7). В примечаниях к выпуску упоминается:

Также поддерживается генерация и управление 32-битными двоичными файлами

Также поставляются необходимые 32-битные библиотеки в:

/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/

Однако здание терпит неудачу. Пример попытки создать минимальную int main() {} программу:

$ scl enable devtoolset-9 'g++ -m32 tst.cpp'
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: skipping incompatible /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/libstdc++_nonshared.a when searching for -lstdc++_nonshared
/opt/rh/devtoolset-9/root/usr/libexec/gcc/x86_64-redhat-linux/9/ld: cannot find -lstdc++_nonshared
collect2: error: ld returned 1 exit status

Библиотека, которую не удается найти, действительно существует, хотя:

/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++_nonshared.a

Никакое количество -L флагов не исправляет ее (и в любом случае это было бы неправильное решение: компоновщик даже не должен пытаться загрузить 64-битные библиотеки в режиме -m32.)

Что мне здесь не хватает?

1 Ответ

1 голос
/ 18 февраля 2020

Полагаю, вы не заметили, что /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++_nonshared.a, скорее всего, является висячей символической ссылкой:

$ file /opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++_nonshared.a
/opt/rh/devtoolset-9/root/usr/lib/gcc/x86_64-redhat-linux/9/32/libstdc++_nonshared.a: broken symbolic link to `../../../i686-redhat-linux/9/libstdc++_nonshared.a'
$ 

Файл назначения /opt/rh/devtoolset-9/root/usr/lib/gcc/i686-redhat-linux/9/libstdc++_nonshared.a, к сожалению, не предоставляется ни одним пакетом CentOS (но это должно быть в devtoolset-9-libstdc++-devel.i686). Таким образом, это, вероятно, указанная CentOS c ошибка упаковки, так как RHEA-2019: 4134 предоставляет запрашиваемый пакет devtoolset-9-libstdc++-devel-9.1.1-2.6.el7.i686.rpm для Red Hat Enterprise Linux 7, включая нужный файл (явно проверенный yum install /opt/rh/devtoolset-9/root/usr/lib/gcc/i686-redhat-linux/9/libstdc++_nonshared.a на RHEL 7).

...