g -std = c 0x和兼容性
我正在使用g 4.4在
linux上编译共享库.如果我可以在库中,我想使用一些C 11功能,但我无法更新编译器的版本或我的库的用户需要任何特殊的编译器开关.
我有两个问题,我很难找到明确的答案. >如果我使用-std = c 0x或-std = g 0x编译共享库,我保证使用我的库的程序不需要那些开关(前提是我在头文件中没有c 0x功能)?它似乎有效,但我不想在未来注册微妙的问题. 谢谢. 解决方法
C 11支持在GCC 4.x版本中仍然是实验性的(它不再是从GCC 5开始的实验).虽然我们试图让事情保持正常,但答案是肯定的,但通常不能保证在所有情况下都能正常工作.使用-std = c 0x导致的ABI更改有很多,这可能会导致混合C 03代码和C 11代码的程序出现问题,有关详细信息,请参阅http://gcc.gnu.org/wiki/Cxx11AbiCompatibility.如果您的图书馆没有导出该页面上描述的任何符号,那么您应该没问题.
不,绝对没有任何机会可行.更高版本的标头使用4.4不支持的功能,即使您可以使用它们,您也需要使用较新的libstdc .so.就是不行. 标题中没有#ifdefs版本,几乎唯一可以找到的是__GXX_EXPERIMENTAL_CXX0X__的检查,当你使用-std = c 0x时,这是由G定义但这并不意味着你的4.4版本支持lambdas,非静态数据成员初始值设定项,正确的右值引用语义,默认/删除的函数等,后面的标题可以自由使用.您必须使用libstdc标头与它们附带的相同版本的GCC. 简而言之,如果您需要适当的C 11支持,则需要使用更新的编译器. 如果您不能使用较新的编译器,则无法获得适当的C 11支持. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |