有没有办法用散列样式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,不知道为什么。
提前致谢!
答案 0 :(得分:4)
尝试使用 --disable-gnu-unique-object 配置选项重建GCC。根据GCC配置选项的文档:
- 使-GNU唯一对象
- 禁用-GNU唯一对象
告诉GCC对C ++模板静态数据成员和内联函数本地静态使用gnu_unique_object重定位。对于具有接受它且GLIBC 2.11或更高版本的汇编程序的工具链,默认情况下启用,否则禁用。
使用gnu_unique_object可能会在最终的可执行文件中导致GNU ABI,旧的Red Hat不支持。