使用较旧的 libc 运行 C++11 库

使用较旧的 libc 运行 C++11 库

我使用C++11功能编写了一个共享库,用gcc 4.8、libc 2.18编译,需要在客户端的CentOS 6机器上运行,该机器有gcc 4.4.7、libc 2.12。这个库中有一些符号在 libc 2.12 中找不到,那么我如何在 CentOS 6 上使用这个库。我可以灵活地选择如何、在哪里、在哪台机器上编译该库,但最终它应该可以在客户端上使用CentOS 6,其中的软件包不能被触及。在 CentOS 6 上使用 DevTools-2 编译它是否可以,或者可能存在任何 ABI 相关问题。如果还有其他建议,请告诉我。提前致谢。

答案1

在与运行它的系统相同的系统上进行编译。您可能需要重新编译以实现发行版的版本跳转(例如从 7 到 8),有时甚至需要重新编译。

如果您使用不同的编译器版本可能编译器的共享帮助程序库、基本 C 或 C++(最有可能)库或各种外部依赖项之间会遇到不兼容问题。我不想调试,这不是一团糟。

答案2


C++11 特性,使用 gcc 4.8 编译

?为什么不是 g++ 4.8 ?

建议:使用 libstdc++.a 静态编译你的库 → 我认为 C++11 函数位于*libstdc++-devel,而不是 glibc 中。

devtoolset-2-libstdc++-devel-4.8.2 附带静态库:

/opt/rh/devtoolset-2/root/usr/lib/gcc/x86_64-redhat-linux/4.8.2/{ libstdc++.a, libstdc++_nonshared.a }


相关内容