多版本冲突下,安装protoc

在使用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,安装成功。

猜你喜欢

转载自blog.csdn.net/kmyfoer/article/details/86219482