我正在尝试在 CentOS 6.3 上构建 Caffe 1.0.0-rc3。我尝试使用 GCC 5.2.0 和 GCC 4.9.3 构建带有 Boost 1.61.0 和 Boost 1.5.6 的 Caffe,并得到相同的、确切的致命错误:
CXX/LD -o .build_release/tools/caffe.bin g++ .build_release/tools/caffe.o -o .build_release/tools/caffe.bin -pthread -fPIC -DCAFFE_VERSION=1.0.0-rc3 -DNDEBUG -O2 -DUSE_OPENCV -DUSE_LEVELDB -DUSE_LMDB -DCPU_ONLY -I/hpc/apps/python27/include/python2.7 -I/hpc/apps/python27/externals/numpy/1.9.2/lib/python2.7/site-packages/numpy/core /include -I/usr/local/include -I.build_release/src -I./src -I./include -I/hpc/apps/atlas/3.10.2/include -Wall -Wno-sign-compare -lcaffe -L/hpc/apps/python27/lib -L/usr/local/lib -L/usr/lib -L/hpc/apps/atlas/3.10.2/lib -L.build_release/lib -lglog -lgflags -lprotobuf -lboost_system -lboost_filesystem -lm -lhdf5_hl -lhdf5 -lleveldb -lsnappy -llmdb -lopencv_core -lopencv_highgui -lopencv_imgproc -lboost_thread -lstdc++ -lcblas -latlas \ -Wl,-rpath,\$ORIGIN/../lib
.build_release/tools/caffe.o: 在函数main':
caffe.cpp:(.text.startup+0x40): undefined reference to
google::SetVersionString(std::string const&)' collect2: 错误: ld 返回 1 退出状态 make: *** [.build_release/tools/caffe.bin] 错误 1
gflags 库是否提供了 SetVersionString 的定义?我在包含文件 gflags.h 中只能找到一个外部函数原型,但在任何地方都没有 SetVersionString 的定义。
谷歌命名空间可能是问题吗?我之所以问,是因为 gflags 的最新 github 更新:
'此版本修复了 gflags_declare.h 配置中的一些错误,并在构建配置中添加了一个单独的 GFLAGS_INCLUDE_DIR CMake 变量。将 GFLAGS_NAMESPACE 设置为“google”不再更改公共头文件的包含路径。这允许将该库与其他 Google 项目(例如 glog)一起使用,这些项目仍然使用已弃用的“google”命名空间作为 gflags 库,但将其包含为“gflags/gflags.h”。