使用散列样式 SYSV 编译 libstdc++

Compile libstdc++ with hash style SYSV

有什么方法可以用哈希样式 SYSV 而不是 GNU/Linux 来编译 GCC 的 libstdc++?我有一个工具链(通过 crosstool-ng),我用它来编译我们公司的库以与范围非常广泛的 Linux 系统一起工作。

其中一个系统是非常古老的 RedHat,它只有 SYSV 哈希样式,当我使用工具链 library/program 编译 C 时,它工作得很好,因为生成的二进制文件使用 SYSV。

但是,当我 link 使用 libstdc++ 时,二进制文件自动更改为 GNU/Linux 样式,原因是因为 libstdc++ 构建为 GNU/Linux,因此出现问题。

运行这个系统的二进制报错

ELF file OS ABI invalid

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

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

提前致谢!

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

--enable-gnu-unique-object

--disable-gnu-unique-object

Tells GCC to use the gnu_unique_object relocation for C++ template static data members and inline function local statics. Enabled by default for a toolchain with an assembler that accepts it and GLIBC 2.11 or above, otherwise disabled.

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