Anaconda cython构建的模块正在寻找错误的GLIBCXX



让我解释一下情况。

我使用系统 g++(在 linux 下)编译了一个 c++ 库。 然后构建了一个cython模块,该模块调用预编译库中的函数。构建cython模块是在anaconada venv下完成的(但在venv内部没有安装g++。因此,cython必须使用系统gcc/g ++)。 现在在同一个 anaconda venv 下,导入 cython 模块会导致错误如下:

anaconda3/envs/hspy/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./libc_rd_halo.so).

似乎由系统 g++ 编译的 c 库 (libc_rd_halo.so) 现在正在寻找一个 anaconda g++ 库。而且我没有在 anaconda venv 中安装 g++。


我可以通过使用 anaconda g++ 从头开始编译 c 库来解决这个问题。再次构建cython模块,然后我可以导入该模块。 但是我想让 anaconda cython 使用系统编译器并在导入模块时查找系统编译器库。

我的问题是:

为什么 Anaconda
  1. cython 默认寻找本地 Anaconda G++,而不是系统编译器? 这样做有什么好处吗?

  2. 如何让 anaconda cython 查找系统编译器库?

  1. 为什么 anaconda cython 默认寻找本地 anaconda g++,而不是系统编译器? 这样做有什么好处吗?

  2. 如何让 anaconda cython 查找系统编译器库?

  1. 因为正如您所发现的,使用一个版本的 GCC 编译的库只能与使用兼容版本的 GCC 编译的其他库链接。

  2. 你没有。如上所述,使用系统编译器构建的二进制文件可能会也可能不会与使用 anaconda 编译器构建的其他 anaconda 二进制文件一起使用。

如果你想让你的二进制文件使用系统库,那么你需要创建一个系统包,而不是一个 anaconda 包。然后,系统包将仅在该系统(和版本)上运行。