0

让我解释一下情况。

我使用系统 g++(在 linux 下)编译了一个 c++ 库。然后构建一个 cython 模块,该模块调用预编译库中的函数。构建 cython 模块是在 anconada 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 查找系统编译器库?

4

1 回答 1

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

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

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

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

如果你想让你的二进制文件使用系统库,那么你需要制作一个系统包,而不是 anaconda 包。系统包将仅适用于该系统(及其版本)。

于 2017-08-14T10:38:29.243 回答