在使用luarocks isntall loadcaffe
时,先是报错
Could NOT find PROTOBUF (missing: PROTOBUF_LIBRARY PROTOBUF_INCLUDE_DIR)
查找解决方案是因为缺少protoc
相关的包,因此使用如下命令安装:
sudo apt-get install libprotobuf-dev protobuf-compiler
重新安装loadcaff
, 又报错:
tmp/luarocks_loadcaffe-1.0-0-2611/loadcaffe/build/caffe.pb.h:12:2: error: #error This file was generated by a newer version of protoc which is
#error This file was generated by a newer version of protoc which is
^
/tmp/luarocks_loadcaffe-1.0-0-2611/loadcaffe/build/caffe.pb.h:13:2: error: #error incompatible with your Protocol Buffer headers. Please update
#error incompatible with your Protocol Buffer headers. Please update
^
/tmp/luarocks_loadcaffe-1.0-0-2611/loadcaffe/build/caffe.pb.h:14:2: error: #error your headers.
#error your headers.
^
In file included from /tmp/luarocks_loadcaffe-1.0-0-2611/loadcaffe/loadcaffe.cpp:21:0:
/tmp/luarocks_loadcaffe-1.0-0-2611/loadcaffe/build/caffe.pb.h:26:55: fatal error: google/protobuf/generated_enum_reflection.h: No such file or directory
#include <google/protobuf/generated_enum_reflection.h>
^
compilation terminated.
make[2]: *** [CMakeFiles/loadcaffe.dir/loadcaffe.cpp.o] Error 1
make[1]: *** [CMakeFiles/loadcaffe.dir/all] Error 2
make: *** [all] Error 2
应该主要是因为protoc版本太新的原因。但其他人用sudo apt-get
安装好好的,我这里却不行。经过一番查找,应该是因为我电脑环境里本身就有protoc
且版本新,在加载相应包时,默认的路径是电脑中原来就有的新版本的protoc
,因此就算我使用sudo apt-get
安装对应版本,加载时也不是加载的它。
解决过程如下:
1.确定默认protoc位置和版本。
protoc --version
> 3.6.1
which protoc
> /media/data/envs/bin/protoc
whereis protoc
> protoc: /usr/bin/protoc /usr/bin/X11/protoc /usr/share/man/protoc.1.gz
上述三个命令分别是默认protoc
的版本,默认加载的protoc
的位置,和找到的protoc
包的位置(多版本,但不是环境中所有的都被找到)。
可以看到,环境默认的版本是3.6.1
,而使用sudo apt-get
安装的版本应该是2.5
, 且位置应该在usr/bin
下面。因此此时需要做的是删除掉原来环境中的高版本protoc
。
我的做法是,直接进入 /media/data/envs/bin
, 使用rm protoc
移除。这样做不知道会不会有什么后遗症。因为我的这个默认版本是装在conda 虚拟环境里,更好的做法应该是使用conda remove --name $环境名 $包名
删除包,但因为我的环境名里又反斜杠,所以这个命令不让我使用。我就简单粗暴地直接删除了。
删除之后,查看当前默认protoc的版本和位置:
protoc --version
> 2.5
which protoc
> /usr/bin/protoc
此时再luarocks isntall loadcaffe
,安装成功。