链接caffe库和依赖g ++ make

时间:2016-04-04 14:39:46

标签: c++ linker g++ caffe

我试图将caffe添加到现有项目中。我得到99个未定义的引用错误,表明它与链接库有关。这些错误提到了caffe,boost和google(与gflags或glog相关)。

链接器命令:( libcaffe位于/ home / torcs / lib)

g++ main.o linuxspec.o -L/home/torcs/export/lib  -lopenal -lalut -lvorbisfile -L/usr/lib -L/home/torcs/lib  -lracescreens -lrobottools -lclient -lconfscreens -ltgf -ltgfclient -ltxml -lplibul -lraceengine -lmusicplayer -llearning -lplibjs -lplibssgaux -lplibssg -lplibsm -lplibsl -lplibsg -lplibul -lglut -lGLU -lGL -lpng -lz -ldl -lXrandr -lXrender -lXxf86vm -lXmu -lXi -lXt -lSM -lICE -lXext -lX11 -lm -lcaffe -lglog -o torcs-bin

链接器错误(前2和后2):

/home/torcs/export/lib/librobottools.so: undefined reference to `caffe::FillerParameter::_default_type_'
/home/torcs/export/lib/librobottools.so: undefined reference to `void caffe::caffe_gpu_set<float>(int, float, float*)'
...
/home/torcs/export/lib/librobottools.so: undefined reference to `caffe::NetStateRule::NetStateRule()'
/home/torcs/export/lib/librobottools.so: undefined reference to `caffe::Timer::MilliSeconds()'
collect2: error: ld returned 1 exit status

我添加了-lcaffe并分别尝试了libcaffe.alibcaffe.so,但是当我添加库时,错误数量没有减少。如果我拼错了-lcaff,它就说找不到libcaffe,否则它就不会这样做,所以我认为lib正确包含在内。

我阅读了链接器顺序(窗口背景),发现符号只有在必需的符号列表中才会被添加。更具体的库应该是最后的,依赖的库应该是第一个。我想如果我只在末尾添加lcaffe,则应填充无法识别的符号列表,并且至少会识别caffe符号,并且可能被其他依赖项替换。但这并没有发生。

我试图找出libcaffe是否提供引用。对于最终未定义的引用(caffe::Timer::MilliSeconds()),nm libcaffe.a找到:

0000000000188090 T _ZN5caffe5Timer12MilliSecondsEv
0000000000187910 T _ZN5caffe8CPUTimer12MilliSecondsEv

哪个建议引用在lib中。但未定义的参考错误并没有消失。

我也试过添加boost libs和glog,没有帮助。

编辑。还有一些奇怪的行为正在发生。我认为这是无关的,但我不确定。我在make clean后第一次构建时收到有关include <random>的错误:

/usr/include/c++/4.8/bits/c++0x_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support is currently experimental, and must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

这可以防止构建o个文件和librobottools.so。但是如果我再次make,那么c ++ 11错误就会消失,这个lib确实会被构建,我会看到99个未定义的引用错误。

0 个答案:

没有答案