OpenCV构建对从源代码构建的protobuf的未定义引用

OpenCV构建对从源代码构建的protobuf的未定义引用,opencv,protocol-buffers,Opencv,Protocol Buffers,我正在尝试从源代码构建OpenCV。我已将protobuf安装到我的主目录中;它是用--启用共享构建的LD_LIBRARY_PATH的头部有$HOME/libLIBRARY\u PATH和LD\u RUN\u PATH设置为$LD\u LIBRARY\u PATH,CPATH设置为$HOME/includePKG_CONFIG_路径指向$HOME/lib/pkgconfig 以下是一些相关版本: opencv==3.1.0 gcc==4.8.5 g++==4.8.5 python==3.5.2

我正在尝试从源代码构建OpenCV。我已将protobuf安装到我的主目录中;它是用
--启用共享
构建的
LD_LIBRARY_PATH
的头部有
$HOME/lib
LIBRARY\u PATH
LD\u RUN\u PATH
设置为
$LD\u LIBRARY\u PATH
CPATH
设置为
$HOME/include
PKG_CONFIG_路径
指向
$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。但是make没有找到它

../../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,但我无法删除它,因为我没有根访问权限。所以我不确定解决方法是什么。

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


如果您想将Matlab与OpenCV 3.1结合使用,我认为您可能需要降低protobuf版本,如protobuf-2.5.0,然后您可以使用GCC 4.9重建OpenCV。

最近我遇到了同样的问题,因为我安装了最新的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。

我发现GCC 4.8.5或4.9也存在同样的问题,但OpenCV可以使用GCC 5.4构建。不幸的是,我需要使用早期的GCC进行构建,因为Matlab尚未正式支持GCC 5。我发现GCC 4.8.5或4.9也存在同样的问题,但openCV使用GCC 5.4进行构建是可以的。不幸的是,我需要使用早期的GCC进行构建,因为Matlab还没有正式支持GCC 5