Anaconda 将 C/C++ 链接器与重复库混淆
Posted
技术标签:
【中文标题】Anaconda 将 C/C++ 链接器与重复库混淆【英文标题】:Anaconda confuses C/C++ linker with duplicate libraries 【发布时间】:2017-10-13 09:16:15 【问题描述】:这发生在 Linux 系统上。 Anaconda 带有几个 C 库,例如 libz
或 libgomp
。我在/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 CMakefind_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++ 链接器与重复库混淆的主要内容,如果未能解决你的问题,请参考以下文章