【发布时间】:2017-06-08 13:54:26
【问题描述】:
我正在尝试编译其中包含 GFLAGS 的文件。 我的编译命令:
g++ -I ../eigen-eigen-b9cd8366d4e8/ -I/caffe_path/distribute/include my_file.cpp -std=c++0x -lpthread -lglog -lboost_system -DUSE_OPENCV
我的错误信息是:
/usr/bin/ld: /tmp/ccv5GAaZ.o: undefined reference to symbol '_ZN6google26ShowUsageWithFlagsRestrictEPKcS1_'
//usr/lib/x86_64-linux-gnu/libgflags.so.2: error adding symbols: DSO missing from command line
这是我第一次与 Gflags 合作。根据互联网上的建议,我尝试在以下几行中用#ifndef 和#endif 评论行,但没有帮助。
#ifndef GFLAGS_GFLAGS_H_
namespace gflags = google;
#endif
我也尝试过对此 thread 的建议,但没有解决任何问题。
【问题讨论】:
-
当我遇到这种类型的错误时,结果是我正在加载的库版本不一致。检查您的 LDD_LIBRARY_PATH 以确保您获得每个模块的正确版本。您也可以在一些有用的对象上尝试
ldd。检查您的整体环境是否存在不一致,并确保您拥有sourced 正确的 *vars.sh 文件。 -
我最近下载了我的操作系统(Ubuntu 16.04)并安装了所有库。所以我不太认为关于过时的库可能存在一些不一致之处。可能正如您所说,由于其他原因,仍然存在一些不一致之处。 LDD_LIBRARY_PATH 和正确的 *vars.sh 文件是什么意思。
-
我在其中添加了一个额外的“D”;它应该是
LD_LIBRARY_PATH。它是一个标准环境变量,控制库加载首选项。一些工具在其 $_HOME/bin 目录中有一个名为 <tool>vars.sh的脚本;对于这些工具,您(或构建脚本)需要获取文件以正确设置路径变量。例如,MKL(英特尔的数学内核库)就有一个。 -
当我命令这个
echo $LD_LIBRARY_PATH它什么也不打印 -
这让我很担心——但我在人口密集的环境中工作。我不知道你应该拥有什么,因为我不知道你已经拥有什么;我只是想为比我更了解你的 Caffe 内部结构的人收集信息。