1

我正在尝试将 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,它会说 cannot find libcaffe,否则它不会这样做,所以我猜该 lib 被正确包含。

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

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

0000000000188090 T _ZN5caffe5Timer12MilliSecondsEv
0000000000187910 T _ZN5caffe8CPUTimer12MilliSecondsEv

这表明参考文献在库中。但是未定义的引用错误并没有消失。

我还尝试添加 boost libs 和 glog,但没有帮助。

编辑。还有一些额外的奇怪行为正在发生。我认为这无关,但不确定。我在 a 之后第一次构建时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 错误消失了,这个库确实得到了构建,我看到了 99 个未定义的引用错误。

4

0 回答 0