【问题标题】:Compile libstdc++ with hash style SYSV使用哈希样式 SYSV 编译 libstdc++
【发布时间】:2017-01-01 03:09:54
【问题描述】:

有什么方法可以用哈希样式 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,不知道为什么。

提前致谢!

【问题讨论】:

    标签: c++ linux gcc sysv


    【解决方案1】:

    尝试使用 --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 不支持此功能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-07
      • 1970-01-01
      • 2014-01-22
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 2014-05-09
      • 1970-01-01
      相关资源
      最近更新 更多