未定义引用[abi:cxx11] 我有一个我正在用GCC 7.3 C++ 17编写的项目, 我的项目链接到使用GCC 7.3但使用c++11构建的第三方库。 当我试图链接lib时,我得到了对ec_core::ECPassword::getPlainText[abi:cxx11]()的未定义引用 我试着用疑问句,但没有成功。 我正在使用CMake。 如果我要添加到CMake文件中 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1)

未定义引用[abi:cxx11] 我有一个我正在用GCC 7.3 C++ 17编写的项目, 我的项目链接到使用GCC 7.3但使用c++11构建的第三方库。 当我试图链接lib时,我得到了对ec_core::ECPassword::getPlainText[abi:cxx11]()的未定义引用 我试着用疑问句,但没有成功。 我正在使用CMake。 如果我要添加到CMake文件中 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=1),c++,c++11,c++17,C++,C++11,C++17,在代码中,我这样做: #define _GLIBCXX_USE_CXX11_ABI 0 ec_framework::ConfigRP _ecconfig = m_ecapp->load(path, fileName, "ver_num"); #undef _GLIBCXX_USE_CXX11_ABI 我也犯了同样的错误 如果我在做手术 add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0) 我得到了很多关于其他函数的未定义引用

在代码中,我这样做:

#define _GLIBCXX_USE_CXX11_ABI 0
    ec_framework::ConfigRP _ecconfig = m_ecapp->load(path, fileName, "ver_num");
#undef _GLIBCXX_USE_CXX11_ABI
我也犯了同样的错误 如果我在做手术

add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)
我得到了很多关于其他函数的未定义引用。 如果我在他们周围

#define _GLIBCXX_USE_CXX11_ABI 1
    function_name;
#undef _GLIBCXX_USE_CXX11_ABI
这没用。
有没有办法将它们链接在一起?

在包含标准库标题时,该宏只做一些有用的事情,就像您对
add_definitions
@Botje所做的那样,是否有其他方法来解决此问题?第一步是检查第三方是否确实包含缺少的符号,第二步是验证您是否确实正确链接到它。如果您确切地知道库是如何构建的,那也很好。@Botje这是
nm
命令
nm libec-core.so | grep“ECApplication.*load“000000000006bce0 T_ZN7ec_core13; ecapplication4loaderksss2_PKc
的输出,这意味着第三方库不是用cxx11 ABI编译的。你的申请大概是?您应该使用cxx11支持重新编译库,或者不使用cxx11重新编译应用程序,最好使用相同的编译器版本。