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,不知道为什么。

提前致谢!

4

1 回答 1

5

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

--enable-gnu-unique-object

--disable-gnu-unique-object

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

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

于 2016-08-28T08:52:31.363 回答