ubuntu faster-rcnn File already exists in database: caffe.proto

我是ubuntu 14.04, matlab 2014a 来运行faster-rcnn的,运行时会报错误:

ibprotobuf ERROR google/protobuf/descriptor_database.cc:57] File already exists in database: foo/foo.proto libprotobuf FATAL google/protobuf/descriptor.cc:862] CHECK failed: generated_database_->Add(encoded_file_descriptor, size):  terminate called after throwing an instance of 'google::protobuf::FatalException'   what():  CHECK failed: generated_database_->Add(encoded_file_descriptor, size): 


这是大多数linux 编译caffe版本faster-rcnn 会遇到的情况,我搜集了很多资料,尝试了很多方法,记录下来一个可行的。

首先,出现问题的原因;

在Linux上编译google protobuff时,configure 默认选项是生成动态库,即libprotobuf.so文件。如果同时在多个动态库(动态库以dlopen方式动态加载)中使用同一buff结构.

解决办法,

第一, caffe 的makefile需要修改,找到如下这句:

LIBRARIES += glog gflags boost_system boost_filesystem m hdf5_hl hdf5

删掉protobuf

2,找到下面这句话,

LDFLAGS += $(foreach librarydir,$(LIBRARY_DIRS),-L$(librarydir)) $(PKG_CONFIG) \$(foreach library,$(LIBRARIES),-l$(library))

在后面添加如下语句:

LDFLAGS += -Wl,-Bstatic -lprotobuf -Wl,-Bdynamic

第二,重新编译protobuf

首先卸载以前旧版本protobuf

sudo apt-get remove libprotobuf-dev protobuf-compiler
sudo apt-get remove libprotobuf-lite8 libprotoc8
sudo apt-get remove python-protobuf
sudo pip uninstall protobuf

下载新版本protobuf:下载网址:https://developers.google.com/protocol-buffers/docs/downloads。

说明:最好不要在github上面下载。此处顺便贴出github的网址:https://github.com/google/protobuf/。原因是,github上面下载的没有configure文件。此时需要先在该文件夹内运行./autogen.sh命令。该命令会从无法访问的网站下载文件。导致连接超时(如果电脑能fq,就没事。否则就没法下载成功。因而会出现死结)。

以文本形式打开google buff代码目录下的configure文件,在把第2575至2578行修改为如下:


if test "x${ac_cv_env_CFLAGS_set}" = "x"; then :   CFLAGS="-fPIC" fi if test "x${ac_cv_env_CXXFLAGS_set}" = "x"; then :   CXXFLAGS="-fPIC"

从/src/makefile 中找到

CXXFLAGS = -g -DNDEBUG

修改为如下:

CXXFLAGS = -g -DNDEBUG -fPIC

然后编译protobuf:

configrue --disable-shared
make
make check
sudo make install
sudo ldconfig

注意:在修改文件后编译要重新编译,首先进行make clean ,否则不会重新执行

贴上对我有帮助的参考链接:

https://xiaobai1217.github.io/2017/08/07/fast_rcnn/#more

http://blog.csdn.net/linyushan11/article/details/10378419(我是先按照这个方法做的,但是没有效果,然后结合第一个链接,修改caffe 的makefile,最终解决了问题)

你可能感兴趣的:(linux学习,科研)