我正在尝试从源代码构建OpenCV。我有protobuf安装到我的主目录;它是用--enable-shared
构建的。 LD_LIBRARY_PATH
头部$HOME/lib
; LIBRARY_PATH
和LD_RUN_PATH
设置为$LD_LIBRARY_PATH
,CPATH
设置为$HOME/include
。 PKG_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访问权限。所以我不确定解决方法是什么。
答案 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。