如何使用Red Hat Developer Toolset构建32位二进制文 件?

问题描述 投票:0回答:1

我找不到任何有关如何使用Red Hat Developer Toolset(在本例中为9.0版,在CentOS 7上运行)定位32位的文档。发行说明中提到:

也支持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个标志的数量没有修复此问题(无论如何这都是错误的解决方案;链接器甚至不应尝试在-m32模式下加载64位库。)

我在这里想念什么?

centos g++ centos7 32-bit devtoolset
1个回答
0
投票

我想你没有注意到/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'
$ 

不幸的是,任何CentOS软件包都不提供目标文件/opt/rh/devtoolset-9/root/usr/lib/gcc/i686-redhat-linux/9/libstdc++_nonshared.a(但它应该在devtoolset-9-libstdc++-devel.i686中)。因此,可能是CentOS特定的打包错误,因为RHEA-2019:4134提供了包含所需文件的Red Hat Enterprise Linux 7的可疑软件包devtoolset-9-libstdc++-devel-9.1.1-2.6.el7.i686.rpm(在RHEL 7上由yum install /opt/rh/devtoolset-9/root/usr/lib/gcc/i686-redhat-linux/9/libstdc++_nonshared.a明确验证)。

© www.soinside.com 2019 - 2024. All rights reserved.