在Ubuntu 16.04上构建OpenCV 3.1失败(未定义引用)

在Ubuntu 16.04上构建OpenCV 3.1失败(未定义引用),opencv,ubuntu,ubuntu-16.04,opencv3.1,Opencv,Ubuntu,Ubuntu 16.04,Opencv3.1,我正试图在我的Ubuntu 16.04上安装OpenCV3.1,以便在QT5中进行开发。遗憾的是,从源代码构建它总是由于未定义的引用而出错(见下文) 我使用了以下方法: cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_VTK=O

我正试图在我的Ubuntu 16.04上安装OpenCV3.1,以便在QT5中进行开发。遗憾的是,从源代码构建它总是由于未定义的引用而出错(见下文)

我使用了以下方法:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_VTK=ON..
而且效果很好。但构建它总是会产生这种错误

../../lib/libopencv_viz.so.3.1.0: undefined reference to `vtkSTLReader::New()'
../../lib/libopencv_viz.so.3.1.0: undefined reference to `vtkOBJReader::New()'
collect2: error: ld returned 1 exit status
modules/viz/CMakeFiles/opencv_test_viz.dir/build.make:232: recipe for target 'bin/opencv_test_viz' failed
make[2]: *** [bin/opencv_test_viz] Error 1
CMakeFiles/Makefile2:3358: recipe for target 'modules/viz/CMakeFiles/opencv_test_viz.dir/all' failed
make[1]: *** [modules/viz/CMakeFiles/opencv_test_viz.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
当然,我在谷歌上搜索并尝试了我发现的一切。尝试了几个不同的cmake标志(或者更确切地说,没有),尝试重新安装libvtk5-dev,还尝试了libvtk6-dev,甚至从源代码构建了vtk7.1,因为我假设其中缺少一些东西

我还尝试通过添加opencv_contrib

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_OPENGL=ON -D BUILD_TIFF=ON -D WITH_VTK=ON -D BUILD_EXAMPLES=ON -D OPENCV_EXTRA_MODULES_PATH=/home/user/opencv/opencv-3.1.0/opencv_contrib/modules ..
但这已经产生了以下错误

CMake Error at opencv_contrib/modules/text/CMakeLists.txt:22 (ocv_add_testdata): `Unknown CMake command "ocv_add_testdata".
另外请注意,我确实升级/更新了列出的所有软件包,并且

所以基本上,在两天的时间里,我通过谷歌随机尝试了所有可能的解决方案,现在我在这里提问。 希望有人知道如何解决这个问题,谢谢


编辑:我只在OpenCV3.1中遇到这些问题。我的OpenCV 2.4.13确实在工作,我也遇到了同样的情况。这是工作,突然我得到了同样的错误。我重新启动了OpenCV 3.1,它又开始工作了


看起来这些家伙在额外模块和OpenCV中都更新了一些东西,而你只是拉了额外的模块。

对于第二部分,看起来有人把OpenCV\u contrib/Modules/text/CMakeLists.txt搞砸了

只需编辑此文件并删除末尾的行:

ocv_add_testdata(samples/ contrib/text
    FILES_MATCHING PATTERN "*.xml" PATTERN "*.xml.gz" REGEX "scenetext[0-9]+.jpg"
    COMPONENT "tests"
)

克隆后只需将
opencv\u contrib
存储库切换到
3.1.0
标记即可

git checkout 3.1.0


然后再次尝试构建。

首先,确保已在系统上成功构建并安装vtk

然后,通过使用命令“locate STLReader”或“locate vtkOBJReader”确保在某些特定目录中找到“vtkOBJReader”或“STLReader”lib。如果找到vtkOBJReader或STLReader相关文件。这意味着vtk在新版本中已更改了其结构,例如,将vtkOBJReader移动到子库vtkIOGeometry中,因此如果要使用该类,必须告诉cmake查找vtkIOGeometry

最后,修改opencv3/cmake/OpenCVDetectVTK.cmake,为每个find_包(VTK安静组件)添加一个条目vtkIOGeometry


成功!

问题似乎出在VTK上,它没有出现在您发布的软件包的链接中。您可以使用
-D with_VTK=OFF
进行构建,或者安装VTK吗?.p.S同时使用
QT
VTK
进行编译可能会导致复杂问题:我做了您所说的,似乎在为我工作。顺便说一句,这会有什么影响e之后会有什么影响?我的意思是,我的contrib模块在这次编辑后会正常工作吗?