Anaconda 将 C/C++ 链接器与重复库混淆

Posted

技术标签:

【中文标题】Anaconda 将 C/C++ 链接器与重复库混淆【英文标题】:Anaconda confuses C/C++ linker with duplicate libraries 【发布时间】:2017-10-13 09:16:15 【问题描述】:

这发生在 Linux 系统上。 Anaconda 带有几个 C 库,例如 libzlibgomp。我在/usr/lib 的系统上也全局安装了这些库中的大部分。现在,每当链接器或 CMake find_package 查找这些库时,我最终可能会遇到版本冲突:

Readline_INCLUDE_DIR:PATH=/home/mattmilten/anaconda3/include
Readline_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libreadline.so

这通常会破坏我的构建。

如何让我的系统库优先于 anaconda 库?顺便说一句,我的LD_LIBRARY_PATH 是空的。

【问题讨论】:

你读过the CMake find_package reference吗?它有许多设置搜索路径的选项。 我宁愿不修改 find_package() 调用。 我不得不删除我的整个 anaconda 安装以使其再次工作。真烦人。 您可以将 CMAKE_PREFIX_PATH CMake 变量设置为 anaconda 的目录,因此 CMake 的 find_* 命令更喜欢 anaconda 的包而不是系统包。但是,在运行时动态加载器更喜欢系统路径而不是其他加载器。可能,LD_LIBRARY_PATH 会用加载器解决问题。 【参考方案1】:

您是否将 C_INCLUDE_PATH 等环境变量设置为您的 anaconda 包含目录?这会将该路径添加到您的标头搜索路径,而不是库搜索路径(即 LIBRARY_PATH)。如果是这样,您可以在使用 cmake 之前取消设置 C_INCLUDE_PATH。或者,如果您确实想链接一些您在全局库路径中没有的 anaconda 库,您可以将全局库路径添加到 C_INCLUDE_PATH。

【讨论】:

不,我没有设置任何环境变量。我还检查了所有可能包含一些库或包含路径的环境变量。【参考方案2】:

我通常重命名我的 acondada 目录并从构建目录重新运行 ccmake ..。我检查了 ccmake(不是 cmake)中的所有条目,然后进行配置。 然后为了重新激活 python,我将名称改回以匹配我的路径导出。

【讨论】:

以上是关于Anaconda 将 C/C++ 链接器与重复库混淆的主要内容,如果未能解决你的问题,请参考以下文章

初始化器与构造器[重复]

公共访问器与类的公共属性[重复]

C ++中的独立Python解释器[重复]

初学必备Win10环境下Anaconda安装

将 Django 分页器与具有不同显示数量的嵌套模板一起使用

迭代器与函数Python学习