首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅在远程计算机上对Boost Library的引用未定义

仅在远程计算机上对Boost Library的引用未定义
EN

Stack Overflow用户
提问于 2017-09-15 09:04:37
回答 1查看 106关注 0票数 0

问题:我的文件在本地虚拟机(LVM)上编译,而不是在Institute服务器(IS)上编译。

在LVM上:

代码语言:javascript
复制
PATH=/home/X/my_lib/boost_1_64_0:$PATH
LD_LIBRARY_PATH=/home/X/my_lib/boost_1_64_0/stage/lib:$LD_LIBRARY_PATH
export PATH 
export LD_LIBRARY_PATH

打开的是:

代码语言:javascript
复制
PATH=/user/X/my_lib/boost_1_64_0:$PATH
LD_LIBRARY_PATH=/user/X/my_lib/boost_1_64_0/stage/lib:$LD_LIBRARY_PATH

export PATH
export LD_LIBRARY_PATH

使用以下命令在LVM上编译文件:

代码语言:javascript
复制
g++ -std=c++11 -O3 benchmark_ad_tree.cpp blank_scoring_function.cpp fnml_scoring_function.cpp log_likelihood_calculator.cpp bdeu_scoring_function.cpp bayesian_network.cpp score_calculator.cpp ad_tree.cpp -o check  -L /home/X/my_lib/boost_1_64_0/stage/lib/*.so

但是,当使用相同的命令编译相同的代码时,它会抛出以下一堆异常:

代码语言:javascript
复制
g++ -std=c++11 -O3 benchmark_ad_tree.cpp blank_scoring_function.cpp fnml_scoring_function.cpp log_likelihood_calculator.cpp bdeu_scoring_function.cpp bayesian_network.cpp score_calculator.cpp ad_tree.cpp -o check  /user/X/my_lib/boost_1_64_0/stage/lib/*.so

更新:遵循@John Zwinck的建议(在答案部分)。

我已经将编译命令更新为

引发的异常:

代码语言:javascript
复制
g++ -std=c++11 -O3 benchmark_ad_tree.cpp blank_scoring_function.cpp fnml_scoring_function.cpp log_likelihood_calculator.cpp bdeu_scoring_function.cpp bayesian_network.cpp score_calculator.cpp ad_tree.cpp -o check -L /user/X/my_lib/boost_1_64_0/stage/lib -lboost_numpy -lboost_python  -lboost_thread

引发异常:

代码语言:javascript
复制
/usr/bin/ld: /tmp/ccWojrSj.o: undefined reference to symbol '_ZN5boost6system15system_categoryEv'
/user/X/my_lib/boost_1_64_0/stage/lib/libboost_system.so.1.64.0: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
EN

回答 1

Stack Overflow用户

发布于 2017-09-15 09:13:51

您使用了错误的链接器参数:

代码语言:javascript
复制
-L /home/X/my_lib/boost_1_64_0/stage/lib/*.so

这应该是:

代码语言:javascript
复制
-L /home/X/my_lib/boost_1_64_0/stage/lib -l boost_numpy -l boost_python

没有必要在PATH中设置Boost,除非万不得已,否则也不应该设置LD_LIBRARY_PATH

永远不要将外壳通配符(*)用作构建命令的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46230221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档