之前因为要修改caffe源码,经常需要重新编译caffe,这里对遇到的问题做一个总结。
编译中出现红色的error错误:unsupported GNU version! gcc versions later than 4.9 are not supported!
解决方法:按要求安装一个低版本的gcc,然后在makefile.config重新制定gcc路径为刚刚安装的路径(网上也有人直接修改cuda源码去掉限制)。重新编译,问题解决。
... opencv/lib/libopencv_gpu.so: undefined reference to av_free_packet@...
这个问题经查阅资料发现有各种版本,这里是找不到ffmpeg库的问题。
解决方法:方法一、重设环境变量,让编译器能找到所需的文件。方法二、在makefile.config里加一句:
LINKFLAGS := -Wl,-rpath,YourPath/ffmpeg/lib
之后出现找不到opencv lib中的文件,同样用上边的办法解决(虽然可以过但似乎解决不彻底,推荐方法一)。
采用-j多线程编译时,可能会出现以下错误:fatal error: caffe/proto/caffe.pb.h: No such file or directory
解决方法:首先注意开的线程数不能过大。一般来说先执行make clean即可,如果不行的话可以在caffe根目录下执行以下命令:
protoc src/caffe/proto/caffe.proto --cpp_out=.
mkdir include/caffe/proto
mv src/caffe/proto/caffe.pb.h include/caffe/proto
再进行make clean和make all -j8,可以正常编译了。
最后编译通过,可以通过以下命令进行检验。
cd caffe
./build/tools/caffe.bin
使用中出现的一个问题:训一个模型中途强退了,再训提示找不到shared library。
解决办法:一开始遇到不清楚原因,就重新编译了。后来发现是进程没退干净,还在训着,如果换了个终端就找不到那个进程了。用ps -aux | grep “文件名”找到那个pid,kill掉。再用nvidia-smi追查,保证彻底关掉。可以重启terminal,更新一下环境变量,重启训练,问题解决!