Pre-CXX11 ABI使用的是 C++11 标准之前的 ABI,主要是为了与使用旧版本 ABI 的库保持兼容。这种 ABI 版本的libtorch能与旧的二进制代码一起工作,特别是与一些系统库(例如,使用旧 ABI 编译的libstdc++库)保持兼容。 CXX11 ABI使用的是 C++11 标准引入后的新 ABI。这种版本的libtorch是为了利用 C++11 的新特性...
然而,引入新的 ABI 会打破与现有二进制组件的兼容性,包括以前版本的编译输出和依赖旧 ABI 的库。因此,为了在新旧 ABI 之间提供兼容性,libstdc++ 使用了_GLIBCXX_USE_CXX11_ABI宏来切换 ABI。 宏定义 _GLIBCXX_USE_CXX11_ABI=0:使用旧的 ABI,这与 GCC 5 之前的版本二进制兼容。 _GLIBCXX_USE_CXX11_ABI=1...
果然,问题出在 _GLIBCXX_USE_CXX11_ABI 这个宏。这个宏设置为 1 和 0 是使用了 std::string 的两种不同的代码实现。 这个问题在现实工作中的现象是,大家都使用了 blade-build 进行代码编译管理,BLADE_ROOT 配置文件大家都是拷贝来拷贝去的,BLADE_ROOT 中默认指定 -D_GLIBCXX_USE_CXX11_ABI=0,至于什么原因...
linux-binary-libtorch-cxx11-abi #3759 Sign in to view logs Summary Jobs get-label-type libtorch-cpu-shared-with-deps-cxx11-abi-build libtorch-cuda11_8-shared-with-deps-cxx11-abi-build libtorch-cuda12_1-shared-with-deps-cxx11-abi-build libtorch-cuda12_4-shared-with-deps-cxx11-...
libtorch-cpu-shared-with-deps-cxx11-abi-build libtorch-cuda11_8-shared-with-deps-cxx11-abi-build build libtorch-cuda12_1-shared-with-deps-cxx11-abi-build build libtorch-cuda12_4-shared-with-deps-cxx11-abi-build build libtorch-rocm6_0-shared-with-deps-cxx11-abi-build build libtorc...
-D_GLIBCXX_USE_CXX11_ABI=1 链接新版库 所以,回到OpenVINO的那个问题,提示符号未定义,我估计就是因为,OpenVINO这个第三方的库libinference_engine.so,它是使用c++11规范的libstdc++.so,所以我在引用的时候,也必须使用相同规范的libstdc++.so,否则在这个第三方的内部,std::string就必须改成std::__cxx11::string...
在一个尚未成熟的行业中,一般行业标准是先于国家标准。这就导致了开发人员需要做很多兼容工作,再就是...
运行错是程序可以执行,但是在执行过程中发生异常,提前退出程序。最常见的是指针越界,打开文件失败 ...
当遇到编译时出现"undefined reference to `std::__cxx11::basic_string" 或者 "@GLIBCXX_3.4.21" 的错误时,通常是由于ABI(应用二进制接口)冲突所致。这一问题常见于编译器版本与本地库编译版本不一致的情况。通过网络搜索,发现解决此类问题的常见方法之一是调整cmakelist文件。尝试调整cmakelist...
还有原因可能是链接了使用不同的_GLIBCXX_USE_CXX11_ABI宏编译的目标,在链接旧版gcc编译的第三方库中经常出现。如第三方库无法使用新的ABI编译,则需使用旧版ABI重新编译本地代码。 在CMakeLists.txt中添加如下内容(0 :链接到旧版本;1:链接到新版本): ...