当前位置: 首页 > news >正文

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译,可以参考这篇文章

从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022通过cmake可以快速的进行定位bug,并可以快速解决(vscode 的cmake在Linux下还是比较友好的,但是通常如果在Linux下为什么 不研究makefile呢?),至于如何使用vs2022打开cmake工程,因为还没cmake文件,先创建一个空CMakeLists.txt, 直接在CMakeLists.txt文件夹右击选择vs2022打开,这样vs2022会自动打开cmake文件,也可以参考这篇文章,打开后先把CMakeLists文件的基本信息填上:

cmake_minimum_required(VERSION 3.10.0)
project(yolov5_detect_test VERSION 0.1.0)# 设置语言版本
enable_language(CXX CUDA)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CUDA_STANDARD 11)# 加入opencv库
set(OpenCV_DIR  "F:\\install\\thirdparty\\opencv\\build\\x64\\vc15\\lib")
find_package(OpenCV REQUIRED)
message(STATUS ${OpenCV_LIBS})# 遍历工程源码
file(GLOB_RECURSE SRC_LIST DEPENDS "./src/*.cpp","src/*.cu","src/*.c")# 引入外部的头文件
include_directories("./src")
include_directories("F:\\install\\thirdparty\\protobuf3.11.4\\include")
include_directories("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\include")
include_directories("F:\\install\\thirdparty\\TensorRT-8.5.1.7.Windows10.x86_64.cuda-11.8.cudnn8.6\\TensorRT-8.5.1.7\\include")# 引入外部的lib库文件
link_directories("F:\\install\\thirdparty\\TensorRT-8.5.1.7.Windows10.x86_64.cuda-11.8.cudnn8.6\\TensorRT-8.5.1.7\\lib")
link_directories("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\lib\\x64")
link_directories("F:\\install\\thirdparty\\protobuf3.11.4\\lib")add_executable(yolov5_detect_test ${SRC_LIST})target_link_libraries(yolov5_detect_test libprotobufd cuda cudart nvinfer ${OpenCV_LIBS})

接下来编译:

添加头文件#include <string>,代码格式问题是通过在vs中文件另保存,然后修改格式如下:

保存好以后重新编译,会发现这个文件的没有错误了,但是main文件有大量的类似错误,其实也是编码格式文件:

对main文件进行编码改变后,重新编译发现没有编码问题了,现在是缺少函数:

这个问题是win中需要包含#include <shlwapi.h>头文件即可,然后重新编译,结果如下:

这里提醒缺少.lib文件,说明没有找到,这里需要注意的是我这里工程是Debug模型,因此protobuf的库也需要debug的库,这里需要把一个import_lib.cpp文件加入即可,然后重新编译:


#if defined(_WIN32)
#    define U_OS_WINDOWS
#else
#   define U_OS_LINUX
#endif#ifdef U_OS_WINDOWS
#if defined(_DEBUG)
#    pragma comment(lib, "opencv_world420d.lib")
#else
#    pragma comment(lib, "opencv_world420.lib")
#endif//导入cuda
#pragma comment(lib, "cuda.lib")
#pragma comment(lib, "cudart.lib")
#pragma comment(lib, "cublas.lib")
#pragma comment(lib, "cudnn.lib")//#pragma comment(lib, "Shlwapi.lib")//导入tensorRT
#pragma comment(lib, "nvinfer.lib")
#pragma comment(lib, "nvinfer_plugin.lib")
//#pragma comment(lib, "nvparsers.lib")#if defined(_DEBUG)
#pragma comment(lib, "libprotobufd.lib")
#else
#pragma comment(lib, "libprotobuf.lib")
#endif#ifdef HAS_PYTHON
#pragma comment(lib, "python37.lib")
#endif#endif // U_OS_WINDOWS

结果如下,发现还是保存,其实是因为缺少一个库和使用了protobuf的dll,需要消除即可,解决方法如下图,分别在import_lib.cpp中引入库,在cmake中加入消除警告即可,下图的那个放开的应该是#pragma comment(lib,"Shlwapi.lib"),画错了,然后重新编译:

保存编译即可通过:

调试的情况下,cmake我研究发现不能自动调用其他地方的dll,但是内我又不想每个工程都copydll,这里做法是把那个exe可执行文件单独送到一个我文件夹,把对于的dll也拷贝到这个文件上即可进行调试了。具体如下:

附上完整的cmake:

cmake_minimum_required(VERSION 3.10.0)
project(yolov5_detect_test VERSION 0.1.0)# 设置语言版本
enable_language(CXX CUDA)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CUDA_STANDARD 11)# 设置可执行文件目录
SET(EXECUTABLE_OUTPUT_PATH "F:\\BaiduNetdiskDownload\\tensorrt-integrate\\tensorrt-integrate\\tensorrt-integrate\\run")
# 消除警告
add_definitions(-w)
add_definitions(-DPROTOBUF_USE_DLLS) # 解决# 加入opencv库
set(OpenCV_DIR  "F:\\install\\thirdparty\\opencv\\build\\x64\\vc15\\lib")
find_package(OpenCV REQUIRED)
message(STATUS ${OpenCV_LIBS})# 遍历工程源码
file(GLOB_RECURSE SRC_LIST DEPENDS "./src/*.cpp","src/*.cu","src/*.c")# 引入外部的头文件
include_directories("./src")
include_directories("F:\\install\\thirdparty\\protobuf3.11.4\\x64-Debug\\include")
include_directories("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\include")
include_directories("F:\\install\\thirdparty\\TensorRT-8.5.1.7.Windows10.x86_64.cuda-11.8.cudnn8.6\\TensorRT-8.5.1.7\\include")# 引入外部的lib库文件
link_directories("F:\\install\\thirdparty\\TensorRT-8.5.1.7.Windows10.x86_64.cuda-11.8.cudnn8.6\\TensorRT-8.5.1.7\\lib")
link_directories("C:\\Program Files\\NVIDIA GPU Computing Toolkit\\CUDA\\v11.7\\lib\\x64")
link_directories("F:\\install\\thirdparty\\protobuf3.11.4\\x64-Debug\\lib")add_executable(yolov5_detect_test ${SRC_LIST})target_link_libraries(yolov5_detect_test libprotobufd cuda cudart nvinfer ${OpenCV_LIBS})

相关文章:

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译&#xff0c;可以参考这篇文章从Linux下载下来的工程代码&#xff0c;这里建议直接使用vs系列打开不要用vscode打开&#xff0c;vscode对win下的cmake不友好&#xff0c;主要体现在报错机制无法直接定位&#xff0c;题主的环境是vs2022…...

《C++ Primer Plus》第17章:输入、输出和文件(7)

编程练习 编写一个程序计算输入流中第一个$之前的字符数目&#xff0c;并将$留在输入流中。 #include<iostream>int main() {int ct 0;while(std::cin.peek()!$){ct;std::cin.get();}std::cout << "num: " << ct << std::endl;return 0; }答…...

PGLBox 超大规模 GPU 端对端图学习训练框架正式发布

作者 | PGLBox项目组 导读 PGLBox是百度研发的基于GPU的大规模图模型训练框架&#xff0c;支持数百亿节点和边的图模型全GPU训练&#xff0c;已在百度广泛部署。相比业界主流的分布式 CPU 解决方案&#xff0c;PGLBox 具有超高性能、超大规模、算法丰富、灵活易用、落地广泛等优…...

sql-labs-Less1

靶场搭建好了&#xff0c;访问题目路径 http://127.0.0.1/sqli-labs-master/Less-1/ 我最开始在做sql-labs靶场的时候很迷茫&#xff0c;不知道最后到底要得到些什么&#xff0c;而现在我很清楚&#xff0c;sql注入可以获取数据库中的信息&#xff0c;而获取信息就是我们的目标…...

又一个国内类ChatGPT模型?【秘塔科技上线自研LLM大模型「对话写作猫」】

又一个国内类ChatGPT模型&#xff1f;【秘塔科技上线自研LLM大模型「对话写作猫」】 说个题外话&#xff0c;今天一大早就收到了Biying的邮件。前段时间不是申请了New Biying的内测吗&#xff1f;下午可以尝试一下玩一会儿。如果体验感还不错或者还有很多bug&#xff0c;那我到…...

卷麻了,00后测试用例写的比我还好,简直无地自容......

经常看到无论是刚入职场的新人&#xff0c;还是工作了一段时间的老人&#xff0c;都会对编写测试用例感到困扰&#xff1f;例如&#xff1a; 如何编写测试用例&#xff1f; 作为一个测试新人&#xff0c;刚开始接触测试&#xff0c;对于怎么写测试用例很是头疼&#xff0c;无法…...

动态网页的核心——JSP

文章目录1&#xff0c;JSP 概述2&#xff0c;JSP 小案例2.1 搭建环境2.2 导入 JSP 依赖2.3 创建 jsp 页面2.4 编写代码2.5 测试3&#xff0c;JSP 原理4&#xff0c;JSP 总结4.1 JSP的 缺点4.2技术的发展历程4.3JSP的必要性最后说一句1&#xff0c;JSP 概述 JSP&#xff08;全称…...

RK3588平台开发系列讲解(系统篇)init.d介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、Linux启动简介二、sysvinit配置三、inid.d介绍沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇介绍init.d相关知识。 一、Linux启动简介 Linux用户空间启动时,第一个会启动init进程,用来引导启动其…...

taobao.user.buyer.get( 查询买家信息API )

&#xffe5;开放平台基础API必须用户授权 查询买家信息API&#xff0c;只能买家类应用调用。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient client new…...

python学生信息管理系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;python学生信息 免费获取完整源码源文件配置教程说明等 在IDLE中运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时&#xff0c;有两种方…...

【微信小程序】-- WXML 模板语法 - 条件渲染 -- wx:if hidden (十一)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…...

2023上半年软考,广州/东莞/深圳/江苏报班是明智的选择

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…...

C++修炼之练气期一层——命名空间

目录 1.引例 2.命名空间的定义 3.命名空间的使用 4.命名空间使用注意事项 1.引例 #include <stdio.h> #include <stdlib.h>int rand 10;int main() {printf("%d\n", rand);return 0; } 当我们用C语言写下这样的代码&#xff0c;看着并没有什么语法…...

matplotlib综合学习

1.arange函数arange函数需要三个参数&#xff0c;分别为起始点、终止点、采样间隔。采样间隔默认值为1看例子&#xff1a; import numpy as np #import matplotlib.pyplot as plt xnp.arange(-5,5,1) print(x)2.绘制sin(x)曲线import numpy as np import matplotlib.pyplot as …...

IIS .Net Core 413错误和Request body too large解决办法

错误描述图片比较大时&#xff0c;在前端上传就报413错误。根本到不了后端。在网上看到这个文章比较有用。https://blog.csdn.net/wstever/article/details/1288707421、修改网站Web.config配置文件加入下面这段配置<?xmlversion"1.0" encoding"utf-8"…...

Spring Boot数据访问—(springboot 多数据源)—官方原版

Spring Boot 包含许多用于处理数据源的启动器&#xff0c;本文回答与执行此操作相关的问题。一、配置自定义数据源要配置自己的DataSource&#xff0c;请在配置中定义该类型的Bean。Spring Boot在任何需要的地方重用DataSource&#xff0c;包括数据库初始化。如果需要外部化某些…...

高燃!GitHub上标星75k+超牛的Java面试突击版

前言不论是校招还是社招都避免不了各种面试。笔试&#xff0c;如何去准备这些东西就显得格外重要。不论是笔试还是面试都是有章可循的&#xff0c;我这个有章可循‘说的意思只是说应对技术面试是可以提前准备。运筹帷幄之后&#xff0c;决胜千里之外!不打毫无准备的仗,我觉得大…...

grid宫格布局新手快捷上手-f

前言 grid 网上有很多&#xff0c;但都是大而全的&#xff0c;感觉新人上手很吃力&#xff0c;本文仅以最快捷的方式进行介绍&#xff0c;如何使用grid宫格布局 本文是新人上手&#xff0c;若想了解更多grid布局&#xff0c;请阅读其他文章 使用 声明布局 display: grid;声…...

面试必刷101 Java题解 -- part 3

part1 – https://blog.csdn.net/qq_41080854/article/details/129204480 part2 – https://blog.csdn.net/qq_41080854/article/details/129224785 面试必刷101 Java题解 -- part 3动规五部曲71、斐波那契数列72、跳台阶73、最小花费爬楼梯74、最长公共子序列(二)75、最长公共…...

干货满满!MES的简介和运用

导读 谈及MES必须先谈生产&#xff0c;生产体系模型如图所示&#xff0c;涉及人、财、物、信息等资源&#xff0c;产、供、销等环节&#xff0c;以及供应商、客户、合作伙伴等。 其中&#xff0c;生产管理是通过对生产系统的战略计划、组织、指挥、实施、协调、控制等活动&…...

别再只盯着密钥了!深入ESP32 eFuse,看懂flash加密背后的硬件安全逻辑

别再只盯着密钥了&#xff01;深入ESP32 eFuse&#xff0c;看懂flash加密背后的硬件安全逻辑 当你在ESP32项目中使用flash加密功能时&#xff0c;是否曾疑惑过&#xff1a;为什么简单地烧录几个eFuse位就能实现固件保护&#xff1f;那些看似神秘的DISABLE_DL_DECRYPT、FLASH_CR…...

在vSphere ESXi 7.0上跑MacOS Big Sur?这份保姆级避坑指南帮你一次搞定

在vSphere ESXi 7.0上部署macOS Big Sur的深度避坑指南 虚拟化环境中运行macOS一直是技术爱好者和企业开发者的热门需求。本文将深入探讨在vSphere ESXi 7.0平台上安装macOS Big Sur时可能遇到的各种技术难题及其解决方案&#xff0c;帮助您避开那些让大多数用户头疼的"坑…...

AVL许可排队严重?不想买新许可,回收闲置即刻算例

AVL许可排队严重&#xff1f;不买新许可&#xff0c;回收闲置许可就能解决&#xff0c;我就踩过这个坑关键词分析&#xff1a;AVL里藏着的宝藏AVL许可排队严重&#xff1f;别急着买新许可&#xff01;我们先来看看这个问题到底藏哪儿。2026年我帮某制造业客户做系统优化时&…...

CentOS 7.9离线部署OnlyOffice踩坑全记录:从依赖包下载到SELinux配置的保姆级避坑指南

CentOS 7.9离线部署OnlyOffice全流程实战&#xff1a;从依赖包下载到SELinux配置的深度排错手册 在企业级生产环境中&#xff0c;离线部署文档协作平台往往面临比常规安装更复杂的挑战。本文将以CentOS 7.9为例&#xff0c;详细拆解OnlyOffice在完全离线环境下的部署全流程&…...

开发者个人网站搭建指南:从静态站点生成器到部署实战

1. 项目概述&#xff1a;一个为开发者量身定制的“数字家园” 在代码的海洋里泡久了&#xff0c;我们开发者总会遇到一个不大不小的痛点&#xff1a;如何高效、优雅地展示自己的技术栈、项目作品和个人思考&#xff1f;GitHub的README.md固然是标配&#xff0c;但它更像一份静态…...

AI工具搭建自动化视频生成NVENC

最近在折腾视频生成这块&#xff0c;发现AI工具搭配NVENC&#xff08;NVIDIA的硬件编码器&#xff09;做自动化视频生成&#xff0c;其实是个挺有意思的组合。很多人以为写个脚本调用FFmpeg就能搞定&#xff0c;但真正要把NVENC用透&#xff0c;背后的门道还是挺多的。不如从几…...

ZonyLrcToolsX:跨平台歌词下载解决方案与技术爱好者的音乐管理利器

ZonyLrcToolsX&#xff1a;跨平台歌词下载解决方案与技术爱好者的音乐管理利器 【免费下载链接】ZonyLrcToolsX ZonyLrcToolsX 是一个能够方便地下载歌词的小软件。 项目地址: https://gitcode.com/gh_mirrors/zo/ZonyLrcToolsX ZonyLrcToolsX 是一款功能强大的跨平台歌…...

从信息学奥赛真题到项目实战:C++浮点数精度那些坑,你的double真的够用吗?

从信息学奥赛真题到项目实战&#xff1a;C浮点数精度那些坑&#xff0c;你的double真的够用吗&#xff1f; 在信息学奥赛的赛场上&#xff0c;一个看似简单的多项式计算题可能让许多选手栽跟头——不是算法思路不对&#xff0c;而是浮点数精度处理不当导致答案偏差。这种问题在…...

对立统一的物理本质:黑洞视界动力学

粒子极微黑洞模型将对立统一规律从抽象的哲学辩证法还原为具体的物理动力学过程&#xff0c;其物理本体、动力学根源与几何载体正是全域嵌套的拓扑黑洞结构及其视界动力学。核心在于&#xff0c;黑洞视界本身就是一个天然的、动态的二元对立统一体。1. 对立统一&#xff1a;黑洞…...

从愚人节实验室踩踏事件看资源分配、排队制度与群体行为管理

1. 项目概述&#xff1a;一个愚人节引发的实验室“踩踏事件” 在任何一个技术驱动的组织里&#xff0c;无论是大型研究院、芯片设计公司&#xff0c;还是一个初创的硬件团队&#xff0c;资源分配永远是一个微妙而充满博弈的话题。设备、工具、甚至是某个紧俏的软件许可证&#…...