我正在尝试在我的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_contribcmake -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".
另请注意,我确实升级/更新了列出的所有软件包here和here
所以基本上经过两天随机尝试我可以通过谷歌找到的所有可能的解决方案,我现在在这里问。 希望有人知道如何解决这个问题,谢谢!
编辑:我只在OpenCV3.1中遇到这些问题。我确实有一个有效的OpenCV 2.4.13
答案 0 :(得分:0)
同样发生在我身上。它工作,突然我得到了同样的错误。我重新拉了OpenCV 3.1,它又恢复了工作。
似乎这些人在Extra Modules和OpenCV中都更新了一些东西,你只需要拉出额外的模块。
答案 1 :(得分:0)
对于第二部分,看起来有人搞砸了opencv_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"
)
答案 2 :(得分:0)
opencv_contrib
存储库切换到3.1.0
标记。
git checkout 3.1.0
并尝试再次构建。
答案 3 :(得分:0)
首先,确保已在系统上成功构建并安装了vtk;
然后,使用命令“ locate STLReader”或“ locate vtkOBJReader”以确保在某些特定目录中找到“ vtkOBJReader”或“ STLReader”库。如果找到vtkOBJReader或STLReader相关文件。这意味着vtk已在新版本中更改了其结构,例如将vtkOBJReader移到vtkIOGeometry子库中,因此,如果要使用该类,必须告诉cmake查找vtkIOGeometry。
最后,为每个find_package(VTK QUIET COMPONENTS ...添加一个条目vtkIOGeometry,修改opencv3 / cmake / OpenCVDetectVTK.cmake。
成功!