Sas*_*ssa 5 c++ linux gcc sysv
有什么方法可以使用哈希样式SYSV而不是GNU / Linux来编译GCC的libstdc ++?我有一个工具链(通过crosstool-ng),可用于编译我们的公司库以与各种Linux系统一起使用。
这些系统之一是非常老的RedHat,它只有SYSV哈希样式,当我使用工具链编译仅C的库/程序时,由于生成的二进制文件使用了SYSV,所以它工作得很好。
但是,当我与libstdc ++链接时,二进制文件会自动更改为GNU / Linux风格,原因是因为libstdc ++是作为GNU / Linux构建的,因此出现了问题。
在此系统中运行二进制文件给我错误
ELF file OS ABI invalid
Run Code Online (Sandbox Code Playgroud)
仅出于完整性考虑,我已经尝试了-Wl,-hash-style = sysv,但没有成功。
另外,我还有另一个用于ARM系统的工具链,它们具有相同版本的GCC,GLIBC等,但是在这个工具链中,libstdc ++使用SYSV,不知道为什么。
提前致谢!
小智 5
尝试使用--disable-gnu-unique-object configure选项重建GCC 。根据有关GCC配置选项的文档:
-启用gnu唯一对象
--disable-gnu-unique对象
告诉GCC将gnu_unique_object重定位用于C ++模板静态数据成员和内联函数局部静态。对于带有接受该汇编器且GLIBC 2.11或更高版本的工具链,默认情况下启用。
使用gnu_unique_object可能会在最终的可执行文件中导致GNU ABI,而旧的Red Hat不支持。