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

Anaconda cython-built module is looking for wrong 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使用系统编译器并在导入模块时查找系统编译器库。

我的问题是:

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

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

  1. why does anaconda cython look for a local anaconda g++ by default, but not the system compiler? any benefit doing so?

  2. How can I make anaconda cython look for system compiler library?

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

  2. 你不知道。根据以上,使用系统编译器构建的二进制文件可能会或可能不会与使用 anaconda 编译器构建的其他 anaconda 二进制文件一起使用。

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