【发布时间】:2017-06-05 15:26:53
【问题描述】:
我在集群上安装了两个版本的 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:警告:libboost_serialization.so.1.64.0,需要 /truba/home/osibliyev/boost/lib/libboost_mpi.so,可能与 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 版本的机器上。我该如何解决这个错误?
【问题讨论】:
-
如果你在 SO 上搜索 DSO missing from command line,你会得到一堆可能的答案。你已经读过它们了吗?这看起来很像一个重复的问题。 Here 可能会对您有所帮助。
-
@skypjack 是的,我搜索了类似的问题,但没有一个能解决我的问题。此外,该问题仅发生在集群中,而不发生在我的 PC 中。这让我觉得问题在于存在两个提升版本,但不知道如何摆脱旧版本。
-
问题不在于更新旧版本,而是选择新版本。据我所知,您描述设置的所有环境变量都不会产生这种效果。相反,您希望在指定 Boost 库的任何
-l选项之前将-L/truba/home/osibliyev/boost/lib选项添加到LDADD。但是,您在 运行 时需要LD_LIBRARY_PATH。 -
@JohnBollinger 您的解决方案有效。但是哪个环境变量可以做同样的功能呢?顺便说一句,您可能想回答,以便我选择它作为最佳答案。