Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仍然需要-D_GLIBCXX_使用_cx11_ABI=0表示c++;项目 P>当我的公司升级GCC为6.3时,所有的C++项目都被添加了-DYGLYBCXXUIXUXCX11AY ABI=0,用于GCC中的ABI中断问题。现在我们的gcc是8.2,这个标志仍然在项目文件中。由于项目文件太多,因此不会很快将其删除。我需要建立一个第三方库,该库将由这些应用程序项目链接。我知道出于一致性的原因,我最好使用相同的标志。但我想知道如果我不使用它,我会体验到C++字符串的奇怪行为吗?GCC 8.2能否顺利地处理这个问题,不管你设置或不设置这个标志, < P>标志确保所有模块都具有相同的C++容器的ABI;如果您将使用不同ABI的两个模块链接在一起,它们将对什么是std::string有不同的理解(它在内存中的布局方式,它的方法是什么,…) 混合模块不同C++ C++ ABIS一般是一个坏主意:而如果它们自己运行,不经过C++容器之间的东西应该工作,试图通过例如 STD::String < /C> >这些模块之间会导致编译错误。(std::string实际上是两个ABI中两种不同类型的别名,因此损坏的名称会有所不同),或者,在更微妙的情况下(例如,如果std::string是两个模块之间传递的结构的成员),您将在运行时发生崩溃/损坏。_C++_Linux_Gcc - Fatal编程技术网

仍然需要-D_GLIBCXX_使用_cx11_ABI=0表示c++;项目 P>当我的公司升级GCC为6.3时,所有的C++项目都被添加了-DYGLYBCXXUIXUXCX11AY ABI=0,用于GCC中的ABI中断问题。现在我们的gcc是8.2,这个标志仍然在项目文件中。由于项目文件太多,因此不会很快将其删除。我需要建立一个第三方库,该库将由这些应用程序项目链接。我知道出于一致性的原因,我最好使用相同的标志。但我想知道如果我不使用它,我会体验到C++字符串的奇怪行为吗?GCC 8.2能否顺利地处理这个问题,不管你设置或不设置这个标志, < P>标志确保所有模块都具有相同的C++容器的ABI;如果您将使用不同ABI的两个模块链接在一起,它们将对什么是std::string有不同的理解(它在内存中的布局方式,它的方法是什么,…) 混合模块不同C++ C++ ABIS一般是一个坏主意:而如果它们自己运行,不经过C++容器之间的东西应该工作,试图通过例如 STD::String < /C> >这些模块之间会导致编译错误。(std::string实际上是两个ABI中两种不同类型的别名,因此损坏的名称会有所不同),或者,在更微妙的情况下(例如,如果std::string是两个模块之间传递的结构的成员),您将在运行时发生崩溃/损坏。

仍然需要-D_GLIBCXX_使用_cx11_ABI=0表示c++;项目 P>当我的公司升级GCC为6.3时,所有的C++项目都被添加了-DYGLYBCXXUIXUXCX11AY ABI=0,用于GCC中的ABI中断问题。现在我们的gcc是8.2,这个标志仍然在项目文件中。由于项目文件太多,因此不会很快将其删除。我需要建立一个第三方库,该库将由这些应用程序项目链接。我知道出于一致性的原因,我最好使用相同的标志。但我想知道如果我不使用它,我会体验到C++字符串的奇怪行为吗?GCC 8.2能否顺利地处理这个问题,不管你设置或不设置这个标志, < P>标志确保所有模块都具有相同的C++容器的ABI;如果您将使用不同ABI的两个模块链接在一起,它们将对什么是std::string有不同的理解(它在内存中的布局方式,它的方法是什么,…) 混合模块不同C++ C++ ABIS一般是一个坏主意:而如果它们自己运行,不经过C++容器之间的东西应该工作,试图通过例如 STD::String < /C> >这些模块之间会导致编译错误。(std::string实际上是两个ABI中两种不同类型的别名,因此损坏的名称会有所不同),或者,在更微妙的情况下(例如,如果std::string是两个模块之间传递的结构的成员),您将在运行时发生崩溃/损坏。,c++,linux,gcc,C++,Linux,Gcc,故障排除 如果您收到关于未定义的符号引用的链接器错误 在std::_cxx11命名空间或标记[abi:cxx11]中包含类型 然后,它可能表示您正试图将对象链接在一起 使用不同的值编译的文件 _GLIBCXX_使用_CXX11_ABI宏。当链接到使用较旧版本的GCC编译的第三方库时,通常会发生这种情况。如果 无法使用新的ABI重建第三方库,然后 将需要使用旧ABI重新编译代码 您必须重新编译整个项目和库。在没有标志的情况下将应用程序项目链接到库生成时,我没有看到任何错误。同意。在我的公司开始在任

故障排除

如果您收到关于未定义的符号引用的链接器错误 在std::_cxx11命名空间或标记[abi:cxx11]中包含类型 然后,它可能表示您正试图将对象链接在一起 使用不同的值编译的文件 _GLIBCXX_使用_CXX11_ABI宏。当链接到使用较旧版本的GCC编译的第三方库时,通常会发生这种情况。如果 无法使用新的ABI重建第三方库,然后 将需要使用旧ABI重新编译代码


您必须重新编译整个项目和库。

在没有标志的情况下将应用程序项目链接到库生成时,我没有看到任何错误。同意。在我的公司开始在任何应用程序项目和第三方库中删除标志之前,我将对库使用该标志。谢谢。