链接OpenCV 4.1.0,包括作品,库不

时间:2019-03-19 13:41:33

标签: c++ opencv ubuntu

将Ubuntu从16.04更改为18.04,将OpenCV从3.4.1更改为4.1.0后,我无法编译...任何内容

逐步:

我从github下载了源代码,设置了这些标志:

:ok

编译并安装

接下来,我创建了一个简单的程序:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules cmake -DENABLE_PRECOMPILED_HEADERS=OFF -DBUILD_opencv_cudacodec=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_CUDA=ON -D WITH_TBB=ON -D ENABLE_FAST_MATH=1 -D CUDA_FAST_MATH=1 -D WITH_CUBLAS=1 -D WITH_QT=OFF -D BUILD_SHARED_LIBS=OFF ..

使用以下命令进行编译:

#include "opencv2/highgui.hpp"
#include <opencv2/imgproc.hpp>
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    cout << "V: " << CV_VERSION << endl;
    return 0; 
}

并获得可执行的可执行文件主要文件:

g++ -std=c++11 main.cpp `pkg-config --libs --cflags opencv4` -g -o main

但是当我用Mat添加一行

V: 4.1.0-pre

我的错误超出了我的终端显示的范围

我想像libopencv_core.a这样的文件没有链接

这种链接库的方法始终对我有用,我不知道在哪里查找错误

有任何线索,建议吗?

编辑:

这是我的错误的开始(完全错误包含+4500行,如果有必要,我可以添加带有完全错误的.txt)

#include "opencv2/highgui.hpp"
#include <opencv2/imgproc.hpp>
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    cout << "V: " << CV_VERSION << endl;
    Mat frame;
    return 0; 
}

5 个答案:

答案 0 :(得分:1)

我将在bash中运行pkg-config --libs --cflags opencv4,并检查链接器参数是否正确,并且路径/库是否存在。 make install应该告诉您将库复制到何处(/usr/local/lib或类似的东西)。如果#include有效,通常正确设置包含目录。

答案 1 :(得分:1)

遇到了同样的问题。制作完成后解决

sudo ldconfig

从我触发安装的同一文件夹中。

尝试一下,看起来不错。

答案 2 :(得分:1)

最后我找到了一个解决方案,这个标记是有罪的:-D BUILD_SHARED_LIBS=OFF,将其删除后一切正常

答案 3 :(得分:1)

虽然切换到动态链接可能已解决了此问题,但通常必须在静态版本中针对缺少的库进行链接。

在这种情况下,您必须根据错误消息至少针对pthreadlibippicv进行链接。

答案 4 :(得分:0)

静态链接需要包含更多的依赖项

您的代码

#include "opencv2/highgui.hpp"
#include <opencv2/imgproc.hpp>
#include <iostream> 

using namespace cv; 
using namespace std; 

int main() 
{ 
    cout << "V: " << CV_VERSION << endl;
    Mat frame;
    return 0; 
}

使用批处理脚本在我的系统上构建(win 8.1 64位,opencv 4.2.0。使用BUILD_SHARED_LIBS = OFF编译,编译器mingw-w64编译)

set gcc="C:\Program Files (x86)\mingw-w64\i686-8.1.0-posix-dwarf-rt_v6-rev0\mingw32\bin\g++.exe"
set path_opencv=C:\opencv-4.2.0-vc14_vc15\opencv\build
%gcc% code.cpp -I"%path_opencv%\include" -L"%path_opencv%\x64\mingw-w64\lib" -lopencv_core420 -lz -lpthread

如在opencv答案平台after turning BUILD_SHARED_LIBS to OFF , there are too many undefined references上所讨论的,静态链接不会转发依赖项。因此,我们需要另外链接库-lz -lpthread

此外, -l ...标志的顺序很重要。这意味着以下库将收集并满足开放的依赖项。阅读Specify the libraries for the linker to use了解更多信息。

您的代码更正

仅包含#include <opencv2/core/core.hpp>而不是highguiimgproc就足够了。就像core中定义的cv :: Mat一样。因此,标记-lopencv_core420就足够了,不需要-lopencv_highgui -lopencv_imgproc