linux opencv4.2静态库编译及链接

news2024/7/6 20:55:19

1. 编译静态库

  1. 拉取opencv源码:
    https://github.com/opencv/opencv.git
  2. 进入源码根目录,在platforms/linux目录下创建编译脚本build_linux.sh
cd platforms/linux
vi build_linux.sh

脚本里配置cmake编译参数,这里编译静态库需要将
-DBUILD_SHARED_LIBS=OFF
如果-DBUILD_opencv_world=ON,所有静态库会集中在一个opencv_world里。
可以根据自己的需求打开或关闭对应的开关。

#!/bin/bash
BUILD_TYPE='Release'

rm -rf build_linux

mkdir build_linux
cd build_linux

cmake ../../../  \
    -DCMAKE_BUILD_TYPE=RELEASE \
    -DBUILD_opencv_python2=OFF \
    -DBUILD_opencv_python3=OFF \
    -DBUILD_SHARED_LIBS=OFF \
    -DBUILD_opencv_java=OFF \
    -DBUILD_opencv_world=ON \
    -DBUILD_JAVA=OFF \
    -DBUILD_ANDROID_EXAMPLES=OFF \
    -DWITH_OPENCL=OFF \
    -DWITH_IPP=OFF \
    -DWITH_TBB=OFF \
    -DBUILD_EXAMPLES=OFF \
    -DBUILD_TESTS=OFF \
    -DBUILD_PERF_TESTS=OFF \
    -DBUILD_DOCS=OFF

make -j8

这里我们只编译不安装,如果要安装,需要执行make install。

  1. 编译完成后,在build_linux/lib和build_linux/3rdparty/lib下面产生静态库,都是需要的。

在这里插入图片描述

在这里插入图片描述

2. 链接及测试

为了检查静态库能否正常使用,搭建了简单的cmake测试工程

  1. 把头文件和编译好的制品库拷贝到测试工程下
  2. 添加测试代码test.cpp
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;

int main() {
    cv::Mat image = cv::imread("your_dir/IMG_1811.JPG", cv::IMREAD_COLOR);
    if (image.empty()) {
        cerr << "Failed to read image" << endl;
        return -1;
    }
    return 0;
}
  1. 添加cmakelist.txt, 注意:
  • 除了添加opencv_world还要添加3rdparty的那几个依赖库;
  • target_link_library()要加上-lz, -ldl两个选项;
cmake_minimum_required(VERSION 3.10)
project(OpenCVTest)
message("project root path is ${CMAKE_CURRENT_SOURCE_DIR}")
set(CMAKE_CXX_FLAGS "-pthread" )
set(ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(OPENCV_LIB_PATH "${CMAKE_CURRENT_SOURCE_DIR}/libs/linux/x86-64")

macro(OPENCV_IMPORT_LIBS LibsList LibName LibPaths)
    message(STATUS "import libs ${LibName}!")

    add_library(${LibName} STATIC IMPORTED GLOBAL)
    set_target_properties(${LibName} PROPERTIES IMPORTED_LOCATION ${LibPaths})

    list(APPEND ${LibsList} ${LibName})
endmacro(OPENCV_IMPORT_LIBS LibsList LibName LibPaths)

include_directories(${ROOT_PATH}/include)


OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_world     "${OPENCV_LIB_PATH}/libopencv_world.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_llmlmf    "${OPENCV_LIB_PATH}/libIlmImf.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjpeg   "${OPENCV_LIB_PATH}/liblibjpeg-turbo.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libpng    "${OPENCV_LIB_PATH}/liblibpng.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libtiff   "${OPENCV_LIB_PATH}/liblibtiff.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libjasper "${OPENCV_LIB_PATH}/liblibjasper.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libnotify "${OPENCV_LIB_PATH}/libittnotify.a")
OPENCV_IMPORT_LIBS(OPENCV_LIBS opencv_libwebp    "${OPENCV_LIB_PATH}/liblibwebp.a")


file(GLOB_RECURSE WRAPPER_SRCS 
        ${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp
    )

add_executable(OpenCVTest ${WRAPPER_SRCS})

target_link_libraries(OpenCVTest
    ${OPENCV_LIBS}
    -lz
    -ldl
)
  1. 编译
    在工程根目录下创建build.sh脚本
#!/bin/bash
if [ -d "build" ]; then
   echo "clean build dir... "
   rm -rf build
fi

mkdir build
cd build
cmake ..
make
  1. 测试
    如果上一步没有问题,进入build目录,run可执行文件即可
cd build
./OpencvTest

如果没有报错就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/638609.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

华为OD机试真题 JavaScript 实现【勾股数元组】【2022Q4 100分】,附详细解题思路

一、题目描述 如果三个正整数A、B、C ,ABC则为勾股数 如果ABC之间两两互质&#xff0c;即A与B&#xff0c;A与C&#xff0c;B与C均互质没有公约数&#xff0c; 则称 其为勾股数元组。 请求出给定n~m范围内所有的勾股数元组。 二、输入描述 起始范围 1 < n < 10000 n &…

[数据结构初阶]单链表

顾名思义&#xff0c;单链表就是一个相邻节点用一个单向指针串起来&#xff0c;形成一种链式结构&#xff0c;那怎么将这些节点连结起来方便管理呢&#xff1f; 目录 单链表定义 申请空间 创建节点 打印链表 尾插 尾删 头插 头删 查找 插入 删除 pos后删除 pos位置删除…

Python 接口测试之接口关键字封装

引言 我们使用RF做UI自动化测试的时候&#xff0c;使用的是关键字驱动。同样&#xff0c;Python做接口自动化测试的时候&#xff0c;也可以使用关键字驱动。但是这里并不是叫关键字驱动&#xff0c;而是叫数据驱动。而接口测试的关键字是什么呢&#xff1f; 我们数据驱动的载体…

知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询

大家好,我是微学AI,今天给大家介绍一下知识图谱实战应用15-知识图谱在生物基因学上的应用,实现基因与疾病关联查询。知识图谱在生物基因学中的应用非常广泛,可以帮助研究人员更好地理解和发现基因与疾病之间的关联关系,并推进相关领域的发展。 目录 引言知识图谱简介生物…

Linux之命令别名---alias

Linux之命令别名 定义 别名是命令的快捷方式。为那些需要经常执行&#xff0c;但需要很长时间输入的长命令创建快捷方式很有用 语法格式 alias 别名’原命令 -选项/参数’ 基本用法 查看设置的别名 [redhat8alocalhost ~]$ alias 删除别名 [redhat8alocalhost ~]$ unalia…

你见过的这里都有,开源Web性能测试工具集合

1、JMeter。这个也不用多介绍&#xff0c;基本属于做过Web性能测试都会接触的工具。Apache旗下的开源项目&#xff0c;属于一个Java桌面应用程序。优势是开源免费&#xff0c;扩展能力强。自身性能是硬伤。 2、Locust。Web性能测试的蝗药师&#xff0c;开源免费&#xff0c;并发…

C语言解决任意一个整数分解,逆序输出

C语言解决任意一个整数分解,逆序输出 输入&#xff1a;1234 输出&#xff1a;1 2 3 4 思路&#xff1a; 对于任意一个整数num, &#xff08;1&#xff09;num%10就可以得到其个位数的数字&#xff0c;例如&#xff1a;1234%104 &#xff08;2&#xff09;num/10就可以获取到这个…

【SQL】sqladvisor

文章目录 概述架构流程产品特点安装部署使用帮助输出命令行传参调用配置文件传参调用测试一:对小表进行测试测试二&#xff1a;对大表有索引测试测试三&#xff1a;对大表无索引进行测试测试四&#xff1a;多条SQL同时分析&#xff1a; 来源 概述 SQLAdvisor是由美团点评公司技…

AntDB 企业增强特性介绍——分布式集群下强一致备份恢复技术

AntDB 使用 barman 实现数据的备份和恢复&#xff0c;但是集群节点部署在多台主机上&#xff0c;每个节点单独备份和恢复。多台服务器时钟不同步的情况下同时备份后&#xff0c; 无法真正实现基于时间点的数据完全和不完全恢复。AntDB 提供基于时间点的全局一致性备份恢复。 A…

【趣味JavaScript】我的天! 居然工作了5年的前端开发都不知道eval函数其中居然暗藏玄机!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

【redis-初级】

文章目录 1.非关系型数据库&#xff08;NoSQL&#xff09;2.在Linux上安装redis2.1 安装前准备2.2 安装2.3 启动2.4 关闭 3. redis客户端3.1 命令客户端3.2redis远程客户端3.3 redis编程客户端 1.非关系型数据库&#xff08;NoSQL&#xff09; 2.在Linux上安装redis 2.1 安装前…

抑郁症评估干预系统开发 还你美好人生

随着时代的发展&#xff0c;生活压力越来越大&#xff0c;抑郁症似乎也成为了很常见的心理健康问题&#xff0c;让很多家庭苦不堪言&#xff0c;轻者痛苦折磨&#xff0c;重者甚至会出现自虐自杀&#xff0c;所以人们也越来越重视心理健康问题&#xff0c;想要摆脱抑郁症的束缚…

HP DA1023电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板HP DA1023 处理器Intel(R) Core(TM) i5-8265U已驱动 内存8 GB 2400 MHz DDR4.已驱动 硬盘Samsung SSD 980 250GB(macOS)已驱动 显卡I…

从零开始 Spring Boot 37:初始化 ApplicationContext

从零开始 Spring Boot 37&#xff1a;初始化 ApplicationContext 图源&#xff1a;简书 (jianshu.com) 从前文可以知道&#xff0c;作为 Ioc 容器的 ApplicationContext&#xff0c;需要进行一系列步骤来初始化以最终就绪&#xff08;对于 Web 应用来说就是可以提供Http服务&a…

[PyTorch][chapter 39][nn.Module]

前言&#xff1a; pytorch.nn是专门为神经网络设计的模块化接口. nn构建于autograd之上,可以用来定义和运行神经网络.是所有类的父类. 目录&#xff1a; 基本结构 常用模块 container(容器&#xff09; CPU,GPU 部署 train-test 环境切换 flatten MyLinear 一…

【kali】设置系统方式为中文

目录 1、右击终端 2、输入命令回车 3、需要输入当前账户密码 4、选择语言 5、再次确定 6、输入命令重启 1、右击终端 2、输入命令回车 sudo dpkg-reconfigure locales 3、需要输入当前账户密码 4、选择语言 依次选中en_US.UTF-8 / zh_CN.GBK&#xff08;没找到&#xf…

野火启明RenesasRA4M2 UDS诊断bootloader 升级MCU

基于can总线的UDS软件升级 最近学习UDS诊断协议&#xff08;ISO14229&#xff09;&#xff0c;是一项国际标准&#xff0c;为汽车电子系统中的诊断通信定义了统一的协议和服务。它规定了与诊断相关的服务需求&#xff0c;并没有设计通信机制。ISO14229仅对应用层和会话层做出了…

微信一天可以加多少个好友?

微信作为最大的私域流量池&#xff0c;几乎所有的人都会往微信引流&#xff0c;而微信每天加好友数量是有严格限制的。微信每天加多少人不会封号&#xff1f;微信每天加多少好友才不会被限制&#xff1f;微信频繁加好友被限制怎么办&#xff1f;请跟随小编的脚步一起往下看吧。…

IP地址定位原理

IP地址定位是一种通过IP地址来确定位置的技术&#xff0c;在互联网和移动网络的应用十分广泛。本文将介绍IP地址定位的原理和实现方式。 IP地址定位原理 IP地址是Internet Protocol&#xff08;简称IP&#xff09;的缩写&#xff0c;是互联网上的一个地址标识符用于识别连接到…

合成化学物:169219-08-3,Fmoc-Thr(Ac4Manα)-OH,一种甘露糖苏氨酸

Fmoc-Thr(Ac4Manα)-OH&#xff0c;甘露糖苏氨酸&#xff0c;供应商&#xff1a;陕西新研博美生物科技有限公司产品结构式&#xff1a; 产品规格&#xff1a; 1.CAS号&#xff1a;169219-08-3 2.分子式&#xff1a;C33H37NO14 3.分子量&#xff1a;671.65 4.包装规格&#xff1…