c++ - 链接 OpenCV 4.1.0,包括工作,库不
问题描述
在将 Ubuntu 从 16.04 更改为 18.04 并将 OpenCV 从 3.4.1 更改为 4.1.0 之后,我无法编译...任何东西
一步步:
我从 github 下载了源代码,设置了这些标志:
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
并获得工作可执行的主要:
V: 4.1.0-pre
但是当我用 Mat 添加一行时
#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;
}
我得到的错误比我的终端显示的要多
我想,像 libopencv_core.a 这样的文件没有链接
这种链接库的方法一直对我有用,我不知道在哪里寻找错误
任何线索,建议?
编辑:
这是我的错误的开始(完整错误包含 +4500 行,如果有必要我可以添加带有完整错误的 .txt)
/usr/local/lib/libopencv_core.a(system.cpp.o): In function `cv::ipp::getIPPSingleton()':
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0xdb): undefined reference to `ippicvGetCpuFeatures'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x16e): undefined reference to `ippicvSetCpuFeatures'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x173): undefined reference to `ippicvGetEnabledCpuFeatures'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x1ba): undefined reference to `ippicviGetLibVersion'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x263): undefined reference to `pthread_mutexattr_init'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x270): undefined reference to `pthread_mutexattr_settype'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x283): undefined reference to `pthread_mutexattr_destroy'
system.cpp:(.text._ZN2cv3ippL15getIPPSingletonEv+0x2a1): undefined reference to `ippicvInit'
/usr/local/lib/libopencv_core.a(system.cpp.o): In function `cv::getInitializationMutex()':
system.cpp:(.text._ZN2cv22getInitializationMutexEv+0x63): undefined reference to `pthread_mutexattr_init'
system.cpp:(.text._ZN2cv22getInitializationMutexEv+0x70): undefined reference to `pthread_mutexattr_settype'
system.cpp:(.text._ZN2cv22getInitializationMutexEv+0x83): undefined reference to `pthread_mutexattr_destroy'
解决方案
我会pkg-config --libs --cflags opencv4
在 bash 中运行并检查链接器参数是否正确,以及路径/库是否存在。make install
应该告诉你库被复制到哪里(/usr/local/lib
或类似的东西)。如果可行,通常会正确设置#include
包含目录。
推荐阅读
- python - 如何获取和修改嵌套字典的值?
- javascript - 在所有网站上阻止一个 html 类名
- java - 对于未执行的语句
- c++ - 将 QByteArray 从大端转换为小端
- android - Firebase 身份验证在卸载后保存。我怎样才能删除它?
- python - 重加权距离返回与使用 iris 数据集的 knn 中的常规距离相同的结果
- arrays - 如何从numpy中的矩阵中选择具有来自另一个向量的值的列
- java - 如何在java中运行时在json字符串中添加容器节点
- python - 在其他包中导入模块会导致错误
- swift - JSONEncoder 不允许类型编码为原始值