使用SYSV哈希样式编译libstdc++

5
有没有办法用 SYSV 哈希样式而非 GNU/Linux 编译 GCC 的 libstdc++?我有一个工具链(通过 crosstool-ng),用于编译我们公司的库以适应各种 Linux 系统。
其中一个系统是一个非常古老的 RedHat,仅有 SYSV 哈希样式,当我使用工具链编译仅包含 C 代码的库/程序时,它能正常工作,因为生成的二进制文件使用的是 SYSV 样式。
但是,当我连接 libstdc++ 时,二进制文件自动变成了 GNU/Linux 样式。原因是 libstdc++ 是作为 GNU/Linux 构建的,因此提出此问题。
在该系统上运行二进制文件会导致错误。
ELF file OS ABI invalid

仅为完整性起见,我已经尝试使用-Wl,--hash-style = sysv,但没有成功。

此外,我有另一个针对ARM系统的工具链,其中GCC、GLIBC等版本相同,但在该工具链中libstdc++使用SYSV,不知道为什么。

提前致谢!

1个回答

5
尝试使用--disable-gnu-unique-object配置选项重新构建GCC。根据GCC配置选项文档:

--enable-gnu-unique-object

--disable-gnu-unique-object

告诉GCC在C++模板静态数据成员和内联函数局部静态变量中使用gnu_unique_object重定位。对于接受它的汇编器和GLIBC 2.11或更高版本的工具链,默认启用;否则禁用。

在最终的可执行文件中使用gnu_unique_object可能会导致GNU ABI,这在旧版Red Hat中不受支持。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接