Linux编译opencv4.4.0报错“/usr/bin/ld: cannot find -lopencv_shape”

2023-05-16

opencv4.4.0下载地址:https://sourceforge.net/projects/opencvlibrary/files/
问题描述
安装完opencv4.4.0后编译C++代码显示找不到lib库文件

/usr/bin/ld: cannot find -lopencv_shape
/usr/bin/ld: cannot find -lopencv_stitching
/usr/bin/ld: cannot find -lopencv_objdetect
/usr/bin/ld: cannot find -lopencv_superres
/usr/bin/ld: cannot find -lopencv_videostab
/usr/bin/ld: cannot find -lopencv_calib3d
/usr/bin/ld: cannot find -lopencv_features2d
/usr/bin/ld: cannot find -lopencv_highgui
/usr/bin/ld: cannot find -lopencv_videoio
/usr/bin/ld: cannot find -lopencv_imgcodecs
/usr/bin/ld: cannot find -lopencv_video
/usr/bin/ld: cannot find -lopencv_photo
/usr/bin/ld: cannot find -lopencv_ml
/usr/bin/ld: cannot find -lopencv_imgproc
/usr/bin/ld: cannot find -lopencv_flann
/usr/bin/ld: cannot find -lopencv_core
collect2: error: ld returned 1 exit status

查看后台运行程序
ps

目录

    • 一、安装opencv依赖库
    • 二、opencv编译安装
    • 可能遇到的问题
    • 附:测试代码

一、安装opencv依赖库

sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev-is-python2 python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libjasper-dev(libjasper-dev依赖包可能找不到,参考博客)
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev liblapacke-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install ffmpeg

二、opencv编译安装

2.1 sudo cmake-gui
设置路径如下,点击configure,编译器使用默认即可
在这里插入图片描述
之后,修改两处地方,再点击generate

  1. 勾选上BUILD_opencv_world
  2. 在CMAKE_BUILD_TYPE后填上:RELEASE

如果有需要用到OpenCV contrib组件的,需要在OPENCV_EXTRA_MODULES_PATH后填上opencv-contrib/modules的路径

2.2编译
进入build文件夹,可以发现Makefile文件,输入sudo make开始编译
在这里插入图片描述
2.3安装
输入指令 sudo make install
2.4路径配置

sudo gedit /etc/ld.so.conf.d/opencv.conf

打开文件输入/usr/local/lib
在这里插入图片描述
执行生效指令sudo ldconfig
编辑sudo gedit /etc/bash.bashrc
输入export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
使环境变量生效source /etc/bash.bashrc
opencv4.4.0到此安装完成,但由于opencv4.4.0默认不生成opencv.pc,所以此时查看opencv版本会报错
查看opencv版本 指令:pkg-config opencv --modversion

在这里插入图片描述
解决方法:

cd /usr/local/lib
sudo mkdir pkgconfig
cd pkgconfig
sudo gedit opencv.pc

输入

prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version:4.4.0
Cflags: -I${includedir}/opencv4
Libs: -L${libdir} -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann  -lopencv_core
~                                               

可能遇到的问题

用上文安装方法一直很顺利,可在测试程序时,还是出了点问题,如下,显示找不到lib库
在这里插入图片描述
这种问题的原因我也不太清楚,但我感觉应该是因为opencv4.4.0编译生成opencv4而不叫opencv,所以导致找不到
解决方法:
进入build文件夹,重新编译了一遍opencv,指令如下

sudo make uninstall
sudo cmake -DCMAKE_BUILD_TYPE=Release -DOPENCV_GENERATE_PKGCONFIG=ON -DCMAKE_INSTALL_PREFIX=/usr/local ..
sudo make
sudo make install

注:opencv4默认不生成opencv4.pc,指令-DOPENCV_GENERATE_PKGCONFIG=ON
可以生成opencv4.pc

把上文在/usr/local/lib/pkgconfig底下建的opencv.pc先删除,输入pkg-config opencv4 --modversion,可以看到版本信息,而输入pkg-config opencv --modversion却报错,这时候编译测试代码,却发现找不到opencv
在这里插入图片描述
因此,我在底下复制了一份opencv4.pc,改名为opencv.pc,此时运行代码就不报错了。
在这里插入图片描述
所以我感觉还是opencv的名称有问题,如果按上文方法安装完成后,直接在/usr/local/lib/pkgconfig底下建一个opencv4.pc应该就不报错的(我猜的,没试过

附:测试代码

sudo g++ -std=c++11 `pkg-config opencv --cflags` opencvtest.cpp -o opencv `pkg-config opencv --libs` 

opencvtest.cpp

#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
int main()
{
    Mat srcImage = imread("lena.jpg");
    imshow("源图像",srcImage);
 
    waitKey(0);
 
    return 0;
}

参考博客
在Linux下用正确的姿势安装OpenCV
Package opencv was not found in the pkg-config search path

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux编译opencv4.4.0报错“/usr/bin/ld: cannot find -lopencv_shape” 的相关文章

随机推荐

  • 数据结构——二维数组

    二维数组可以理解为数组的数组 二维数组组织为矩阵 xff0c 可以表示为行和列的集合 但是 xff0c 创建二维数组以实现关系数据库外观相似的数据结构 它提供了一次容纳大量数据的便利性 xff0c 可以在任何需要的地方传递给任意数量的功能
  • 数据结构——链表

    链表是一种随机存储在内存中的节点的对象集 节点包括两个字段 xff0c 即存储在该地址的数据和包含下一节点地址的指针 链表的最后一个节点包含指向null的指针 1 链表的用途 链表不需要连续存在于存储器中 节点可以是存储器中任何位置并链接在
  • 多线程学习笔记--第一章 多线程技能(1)

    1 什么是进程 xff1f 进程是操作系统结构的基础 xff0c 是一次程序的执行 xff1b 是一个程序及其数据在处理机上顺序执行时所发生的活动 xff1b 是程序在一个数据集合上运行的过程 xff0c 它是系统进行资源分配和调度的一个独
  • 多线程学习笔记--第一章 多线程技能(2)

    1 currentThread方法 该方法返回代码段正在被哪个线程调用的信息 2 isAlive方法 判断当前线程是否处于活动状态 活动状态是线程已经启动且尚未终止 线程处于运行或准备开始运行的状态 如果将线程对象以构造参数的方式传递给Th
  • Qt编程过程中若给定一些数,把它们四舍五入后,保留两位小数

    double类型的数进行四舍五入后保留两位小数 场景实现方式方法一 方法二总结 场景 开发的过程中需要显示一些double类型的数 xff0c 但是又不能直接显示 xff0c 需要四舍五入之后保留两位小数 如 xff1a 0 124567
  • C语言中,头文件、源文件和库文件的关系(转)

    初学c xff0c 一直搞不懂几个概念 xff0c 偶然看到一篇比较好的文章 xff0c 转载一下 xff0c 原文https blog csdn net xhbxhbsq article details 78955216 一下是原文内容
  • 串口是怎样传输数据的

    概述 通过逻辑分析仪捕捉串口传输的数据来了解串口传输数据的实质 串行接口简称为串口 xff0c 串行接口 xff08 Serial Interface xff09 是指数据一位一位地顺序传送 实现双向通信就需要一对传输线 xff0c 即TX
  • 精准时空:让人工智能更智能

    如今科技界 产业界最热门的关键词是什么 xff1f 各地方政府给出了明确的答案 人工智能 8月的最后一周 xff0c 重庆 上海两大直辖市 xff0c 争先恐后地举办了以智能为主题的大会 精准时空能力 xff0c 作为机器智能的基础数据 x
  • 关于FindCM厘米级定位,这6个问题的答案你需要知道

    面对越来越复杂的应用场景 xff0c 单一的FindCM xff08 千寻知寸 xff09 产品 xff0c 已经无法满足不同行业客户的差异化需求 近日 xff0c 千寻位置完成FindCM产品分级 xff0c 推出了面向不同行业和应用场景
  • 千寻位置如何满足自动驾驶“刚需”

    自动驾驶 xff0c 本质是汽车产业的升级 自动驾驶技术在5G 人工智能和汽车行业的飞速发展下 xff0c 成为业界焦点 目前 xff0c 通用 一汽 广汽 北汽 吉利 长安等国内外主流车企都在进行自动驾驶技术研发 xff0c 而他们正在使
  • 自动驾驶汽车为什么需要高精度定位?干货都在这里

    2019年5月7日 xff0c 曾作为主PM驱动凯迪拉克 Jeep全系 福特全系车型Sync3导航产品研发 xff0c 现任千寻位置车端高精度定位解决方案经理的宋子未 xff0c 讲授了主题为 自动驾驶汽车为什么需要高精度定位 xff1f
  • GNSS增强定位技术发展与星地融合应用

    引言 xff1a 你能想象吗 xff1f 除了手机和汽车 xff0c 现在连安全帽 道路锥筒 xff0c 甚至跑鞋都需要定位 随着移动物联网的快速发展 xff0c 国民经济各个领域都对更高精度的定位能力产生迫切需求 同时 xff0c 市场也
  • 基于Android系统的高精度定位SDK方案

    最新数据显示 xff0c 全球平均每3人就拥有一台Android xff08 安卓 xff09 系统设备 xff0c 其总数已经超过25亿台 丰富多样的Android设备在改变人们的生活同时 xff0c 也被赋予更多期望 xff0c 是否能
  • Ubuntu 修改 apt 源为阿里云源

    文章目录 软件源 Software Source使用说明图形界面 xff08 新手推荐 xff09 手动修改配置文件 相关链接 软件源 Software Source 软件源是指用于存储各种 Linux 应用程序的存储库 xff0c 包括自
  • (已解决)rplidar_ros 报错:Operation Time Out

    按照wiki装rplidar ros的时候 xff1a https github com robopeak rplidar ros wiki 运行 xff1a roslaunch rplidar ros view rplidar launc
  • CNN学习(四)----SiameseFC代码运行Matlab2018a+vs2015+cuda9.0

    由于siameseFC运行需要调用GPU xff0c 即需要安装CUDA和visual studio xff0c CUDA安装可以参考的我的上一篇博客 若是要运行tensorflow版本 xff0c 可以参考这篇博客 一 失败经验 先介绍一
  • 目标跟踪之ECO代码运行及原理简介

    论文地址 xff1a https arxiv org pdf 1611 09224 pdf 代码地址 xff1a https github com martin danelljan ECO ECO xff08 Efficient Convo
  • UAV123数据集下载、简介及配置

    UAV123主要由91个无人机视频组成 xff0c 其中有数个视频序列较长 xff0c 拆分成三四个较短的片段 xff0c 使用多次 xff0c 所以有123个groundtruth xff0c 其中包含20个长视频即UAV20L xff0
  • UAVDT:The Unmanned Aerial Vehicle Benchmark: Object Detection and Tracking数据集下载

    无人机数据集对于目标跟踪而言是一大挑战 xff0c 近年来 xff0c 正对无人机的数据集也越来越多 xff0c UAVDT是ICCV2018提出的一个数据集 xff0c 共包含80000帧图片 xff0c 不仅可以用于目标跟踪 xff0c
  • Linux编译opencv4.4.0报错“/usr/bin/ld: cannot find -lopencv_shape”

    opencv4 4 0下载地址 xff1a https sourceforge net projects opencvlibrary files 问题描述 安装完opencv4 4 0后编译C 43 43 代码显示找不到lib库文件 usr