libtorch
的 Pre-CXX11 ABI 和 CXX11 ABI 版本主要区别在于它们使用的 C++ ABI(Application Binary Interface)。ABI 定义了编译后的二进制文件在不同模块之间的接口。C++11 引入了一些新的语言特性,导致 ABI 发生变化,因此有两个版本的 ABI 来保持与现有代码的兼容性。
主要区别:
-
ABI 不兼容性:
- Pre-CXX11 ABI 使用的是 C++11 标准之前的 ABI,主要是为了与使用旧版本 ABI 的库保持兼容。这种 ABI 版本的
libtorch
能与旧的二进制代码一起工作,特别是与一些系统库(例如,使用旧 ABI 编译的libstdc++
库)保持兼容。 - CXX11 ABI 使用的是 C++11 标准引入后的新 ABI。这种版本的
libtorch
是为了利用 C++11 的新特性编译的,能带来性能和功能上的改进,但它与 Pre-CXX11 ABI 不兼容。
- Pre-CXX11 ABI 使用的是 C++11 标准之前的 ABI,主要是为了与使用旧版本 ABI 的库保持兼容。这种 ABI 版本的
-
运行时兼容性:
- 如果你使用的系统或者其他依赖库是基于 Pre-CXX11 ABI 编译的,并且你选择使用 CXX11 ABI 编译的
libtorch
,可能会导致链接错误或运行时问题。 - 反之,如果你使用的是新版本的库,并且需要利用 C++11 或更新标准的特性,最好使用 CXX11 ABI 的
libtorch
。
- 如果你使用的系统或者其他依赖库是基于 Pre-CXX11 ABI 编译的,并且你选择使用 CXX11 ABI 编译的
-
应用场景:
- Pre-CXX11 ABI 通常用于需要兼容旧版库的项目,或者你的系统中有许多基于旧 ABI 编译的库。
- CXX11 ABI 则适合更现代的项目,特别是那些完全基于 C++11 或更新标准的项目。
如何选择:
- 如果你不确定,可以检查你的系统库是否已经过渡到 CXX11 ABI。如果它们仍然依赖 Pre-CXX11 ABI,建议使用 Pre-CXX11 ABI 版本的
libtorch
。 - 使用
libtorch
官方提供的二进制文件时,你可以选择对应的 ABI 版本,通常通过环境变量GLIBCXX_USE_CXX11_ABI
来控制:GLIBCXX_USE_CXX11_ABI=0
:使用 Pre-CXX11 ABI。GLIBCXX_USE_CXX11_ABI=1
:使用 CXX11 ABI。
最好使用 CXX11 ABI, 否则你会遇到很多 链接错误。尤其是和别的库进行混编时候。
标签:Pre,11,CXX11,ABI,C++,libtorch,cxx11 From: https://www.cnblogs.com/odesey/p/18389413