两个boost版本之间的冲突

西卜利

我在集群上安装了两个版本的 boost。旧的位于标准位置,而新的位于我的主目录中。由于我没有 su 权限,因此无法删除旧的权限。我为 boost(和其他库)导出了环境变量,如下所示:

export PATH=/truba/home/osibliyev/boost/bin:$PATH
export LD_LIBRARY_PATH=/truba/home/osibliyev/boost/lib:$LD_LIBRARY_PATH
export LIBRARY_PATH=/truba/home/osibliyev/boost/lib:$LIBRARY_PATH
export CPLUS_INCLUDE_PATH=/truba/home/osibliyev/boost/include:$CPLUS_INCLUDE_PATH

编译后make,我在链接阶段收到以下错误:

/usr/bin/ld: 警告:/truba/home/osibliyev/boost/lib/libboost_mpi.so 需要的 libboost_serialization.so.1.64.0,可能与 libboost_serialization.so.1.53.0 /usr/bin/ld 冲突:loadmap.o:未定义对符号“_ZN5boost7archive17archive_exceptionC2ERKS1_”的引用/truba/home/osibliyev/boost/lib/libboost_serialization.so.1.64.0:添加符号时出错:命令行中缺少DSO

lboost_serialization已经添加到LDADD

LDADD = -lmetis -lmpi -lboost_mpi -lboost_serialization -lboost_log -lboost_log_setup -lboost_thread -lpthread -lboost_date_time -lboost_filesystem -lboost_system -lboost_timer

我有点确定错误是因为冲突,因为其他库链接没有问题,只有 boost 抱怨。这不会发生在我只有一个 boost 版本的机器上。我能做些什么来解决这个错误?

约翰·博林格

如何确定工具链的标头和库搜索路径是特定于实现的。对于哪些环境变量(如果有)影响它们或如何影响它们,没有通用规则。

您尝试使用的特定环境变量以及您为它们设置的值表示 UNIX 风格的系统。你应该知道

  • 在这样的系统上,PATH变量设置可执行文件的搜索路径,而不是库或头文件。
  • 在那些识别它的系统上,LD_LIBRARY_PATH动态链接器的搜索路径指定额外的目录——这些在运行时是相关的,而不是构建时。
  • CPLUS_INCLUDE_PATH被 GNU C++ 编译器或其他编译器识别,用于指定额外的目录来搜索包含文件。这与您查找 Boost 头文件有关,但与库无关。对于 GNU 编译器,将在搜索标准目录之前搜索此变量中列出的目录。
  • LIBRARY_PATH被 GNU 链接器和其他可能的链接器识别为指定额外的目录来搜索库。Like CPLUS_INCLUDE_PATH,这与您有关,但它不允许您将库替换为在标准位置之一中找到的同名其他库,因为这些库之前搜索了标准目录

您的错误消息表明链接器正在发现 Boost v1.53 和 v1.64 库的混合。可能这意味着前者驻留在首先搜索的目录中——可能是一个系统目录,例如/usr/lib——但并非您尝试链接的所有 Boost 库都在那里找到;有些可以在您的 v1.64 安装中找到。鉴于您已经尝试过的方法不起作用,您不太可能设置任何环境变量来解决该问题。然而,正如我所说,它依赖于实现,虽然我怀疑您正在使用 GNU 工具链,但您尚未指定。

使用 GNU 工具链,如果您希望链接器在搜索标准目录之前搜索您的个人 Boost 安装库,那么您需要通过命令行选项专门指示它这样做。正如评论中所讨论的,您可以通过添加-L/truba/home/osibliyev/boost/lib到 AutomakeLDADD变量来实现这一点

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

两个脚本之间的jquery冲突

nixOS:如何从相同软件包,相同版本的两个实例之间的冲突中恢复

当两个依赖项中的一个未指定组时,如果两个依赖项之间存在版本冲突,我能否使gradle构建失败

两个引用程序集之间的冲突

两个 url 之间的 Apache htaccess rewriterule 冲突

两个Shape对象之间的Java冲突检测?

不同 Elasticseach 镜像的两个 Docker 容器之间的冲突

如何检测两个阵列之间的冲突?

我有两个版本的testng,如何删除较旧的版本并防止依赖冲突

在两个版本的NetBeans插件之间交换

Haskell:两个版本的代码之间的速度差异

VSTS在两个版本之间找到工作项

在两个版本的 Gnome shell 之间切换

Clickhouse:两个版本之间的行结果差异

使用具有不同版本Android依赖关系的同一库的两个或多个库之间发生冲突

如何检查版本号是否是两个版本号之间的版本

过去如何在两个任意版本之间注入一个版本?

当两个版本的更改相同时,使git merge产生冲突

作曲家两个软件包在依赖版本上发生冲突

如何解决这两个命名空间之间的冲突?

PostgreSQL为什么认为两个可序列化事务之间存在冲突?

避免两个不同视图之间的触摸手势冲突

如何使用Three.js检测JavaScript中两个对象之间的冲突?

如何检测许多中的任何两个jQuery可拖动div之间的元素冲突?

解决两个平移手势识别器之间的冲突

在我的项目和pod中命名两个类之间的冲突

R:(中缀)运算符的两个定义之间的冲突:如何指定包?

如何在Scenekit- iOS中检测两个不同.scn文件的节点之间的冲突?

在Swift 3.0中检测到两个对象之间的冲突?