有没有办法用散列样式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,不知道为什么。
提前致谢!
尝试重建你的 GCC--禁用-gnu-唯一对象配置选项。根据 GCC 配置选项的文档:
--enable-gnu-unique-object
--禁用-gnu-唯一对象
告诉 GCC 对 C++ 模板静态数据成员和内联函数局部静态使用 gnu_unique_object 重定位。默认情况下,对于具有接受它和 GLIBC 2.11 或更高版本的汇编器的工具链启用,否则禁用。
使用 gnu_unique_object 可能会导致最终可执行文件中出现 GNU ABI,这在旧版 Red Hat 中不受支持。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)