但是它告诉我,如果在C 03模式下由GCC 4.3编译的共享库暴露了一个std :: string,那么这将是一个与GCC 4.8在C中编译的可执行文件所理解的不同的std :: string 11模式.
我问的原因是,我计划在CentOS 6上以C11模式部署GCC 4.8编译的程序,CentOS 6的最大封装GCC是4.3 …和一些共享库(无论是第三方C库还是更多的)系统级的东西)可能因此都是C 03.但是如果是这样,我们就无法在旧的Linux发行版上部署任何C11程序,这似乎不大可能.
我天真认为这里可能有问题吗?而且,如果有的话,我该如何解决呢?
从本质上讲,您也可以使用较新的编译器,但是您首先需要编译编译器本身.如果您不想先编译编译器,请使用相应的开发工具集,您应该很好.
是的,你也可以尝试到statically link libstdc++.a.搜索选项-static-libstdc:
When the g++ program is used to link a C++ program,it normally automatically links against libstdc++. If libstdc++ is available as a shared library,and the -static option is not used,then this links against the shared version of libstdc++. That is normally fine. However,it is sometimes useful to freeze the version of libstdc++ used by the program without going all the way to a fully static link. The -static-libstdc++ option directs the g++ driver to link libstdc++ statically,without necessarily linking other libraries statically.
但是,如果您静态链接,则不会得到任何安全更新等等.如果您自己发送libstdc .so,则不会得到更新,但增量更新可能更容易.
关于运行您的应用程序:经验法则是:在需要支持的最旧平台上进行编译,然后您的二进制文件(使用自带的libstdc和其他必需的lib)也可能在较新版本上运行.也就是说,如果您在CentoOS 6上编译,并且它可以工作,那么您可以期望它也可以在CentOS 7上运行.在相关主题上,这正是为什么例如AppImage和相关解决方案建议在旧系统上构建的原因.