OpenCV构建对源自protobuf的未定义引用

时间:2016-06-30 00:06:17

标签: opencv protocol-buffers

我正在尝试从源代码构建OpenCV。我有protobuf安装到我的主目录;它是用--enable-shared构建的。 LD_LIBRARY_PATH头部$HOME/lib; LIBRARY_PATHLD_RUN_PATH设置为$LD_LIBRARY_PATHCPATH设置为$HOME/includePKG_CONFIG_PATH$HOME/lib/pkgconfig

以下是一些相关版本:

opencv==3.1.0
gcc==4.8.5
g++==4.8.5
python==3.5.2
protobuf==2.6.1

我的CMake命令是

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=$HOME -D OPENCV_EXTRA_MODULES_PATH=$HOME/opencv_contrib-3.1.0/modules -D PYTHON_DEFAULT_EXECUTABLE=$HOME/bin/python -D CMAKE_PREFIX_PATH=$HOME ..

cmake成功,甚至说它在<~>/lib/libprotobuf.so找到了PROTOBUF。但是没有找到它。

../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::internal::InitEmptyString()'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::internal::empty_string_once_init_'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::internal::empty_string_'
../../lib/libopencv_dnn.so.3.1.0: undefined reference to `google::protobuf::io::CodedInputStream::BytesUntilTotalBytesLimit() const'
collect2: error: ld returned 1 exit status
make[2]: *** [bin/opencv_test_dnn] Error 1
make[1]: *** [modules/dnn/CMakeFiles/opencv_test_dnn.dir/all] Error 2

其他几个地方提到多个版本的protobuf可能会导致问题。 / lib64中的另一个protobuf,但我无法删除它,因为我没有root访问权限。所以我不确定解决方法是什么。

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题因为我安装了最新的protobuf(3.1.0)并使用GCC 4.9构建了我的opencv。当我切换回GCC 5时,可以成功构建OpenCV 3.1。

如果您想将Matlab与OpenCV 3.1一起使用,我认为您可能需要降级protobuf版本,如protobuf-2.5.0,那么您可以使用GCC 4.9来重建OpenCV。