在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~

这篇具有很好参考价值的文章主要介绍了在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这篇文章背景是笔者在ubuntu上编译C++代码,依赖一些包,然后需要编译并配置到CMakelist做的笔记。主要也是一直不太懂CMakellist,做个笔记以防忘记,也给读者提供一站式的参考,可能您需要的不是这几个包,但大同小异,再带上cmakelist加持,最后提供可视化远程调试教程,可以把C++玩的飞起。这篇文章将有以下内容:

  1. 安装编译一系列工具;
  2. 编译opencv;
  3. 编译jsoncpp;
  4. 编译onnxruntime;
  5. 如何在CMakelist中配置;
  6. Clion远程调试服务器的C++代码;

一、安装编译一系列工具

1.1 安装g++、gcc

sudo apt install -y gcc
sudo apt install -y g++
sudo apt install -y make
sudo apt install -y wget unzip

1.2 安装cmake

参考:

  1. (软链接) https://blog.csdn.net/KIK9973/article/details/118796510
  2. (编译) https://www.cnblogs.com/yanqingyang/p/12731855.html

基本按照参考中的一、下载Binary版(下载即用)操作,不过有些细节要注意,我总结在下面,然后特别注意版本,apt install cmake默认安装的3.10,如果对cmake版本没要求的直接命令安装就可以。这里需要安装时因为编译onnxruntime的时候会要求cmake版本,笔者这里安装的版本是3.26.4,这里我也总结下步骤。

1.2.1 官网下载cmake包

  • 官网
    https://cmake.org/download/
  • 然后这个链接进去是新的,跳转到github下载历史版本:
    https://github.com/Kitware/CMake/releases?page=2
    命名规则一样,举例:
    在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda

1.2.2 加软链接

ln -sf /path/to/cmake-3.XX.X-linux-x86_64/bin/* /usr/bin/

这边的的链接到的路径跟原贴有区别,默认应该是/usr/bin

1.2.3 验证

cmake --version
ctest --version

看到版本信息即可:
在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda

二、编译opencv

参考:https://zhuanlan.zhihu.com/p/473488905

参考链接中的2~4步,当然第一步的依赖包还需要安装一下。然后基本上也没有什么问题。

三、编译jsoncpp

参考:https://blog.csdn.net/lu_linux/article/details/129851534

这个是比较简单的,按照参考中的jsoncpp编译:即可。

四、编译onnxruntime

参考:
https://blog.csdn.net/KIK9973/article/details/118796510
https://blog.csdn.net/jizhidexiaoming/article/details/116268564

4.1 安装步骤

这个可以直接看我总结,坑还挺多的,咱们一步一步来。

  • 拉取代码

先去github拉取源码:

git clone https://github.com/microsoft/onnxruntime.git

再去拉取子项目

git submodule update --init --recursive

检查是否还有子项目需要拉取

git submodule update --init --recursive
  • 编译onnxruntime

cuda版本:

cd /path/to/onnxruntime
./build.sh --config Release --build_shared_lib --parallel --use_cuda --cuda_home /usr/local/cuda  --cudnn_home /usr/local/cuda --allow_running_as_root --skip_tests

正常版:

cd /path/to/onnxruntime
./build.sh --config Release --build_shared_lib --parallel --allow_running_as_root --skip_tests

修改到没报错,然后再install一下:

cd ./build/Linux/release
make install

4.2 报错(keng)的总结

不得不说编译onnxruntime还是遇到不少坑的。

  1. cc1plus: fatal error: cuda_runtime.h: No such file or directory
    这个问题就是cuda没有装好,这里建议cuda删掉重新装,安装的版本可以用笔者这边的CUDA 11.4.3和cuDNN 8.2.4,安装教程参考cuda安装教程;
  2. cmake版本过低的报错。
    按照之前的方法装较新版本的cmake就可以了,具体的版本可以查看报错信息。

五、配置CMakelist

参考:
模板:https://github.com/ganleiboy/CMakeTutorial/tree/master
讲解:https://blog.csdn.net/qq_38410730/article/details/102477162

真心感谢这两篇帖子,还是挺详细的。下面是我的总结和梳理。

5.1 动态库和静态库的区别

这里先要了解动态库和静态库的区别,以及Windows和Linux系统的命名差异。(取自ChatGPT)

动态库(Dynamic Link Library,DLL)和静态库(Static Library)是用于存储和重复使用代码的两种不同方法,它们有以下主要区别:

  1. 链接时机

    • 动态库:在编译时不会将库的代码复制到可执行文件中。相反,它们在运行时加载到内存中,并可以被多个应用程序共享。这使得可执行文件较小,并且库可以更新而不需要重新编译应用程序。
    • 静态库:在编译时将库的代码复制到可执行文件中。这意味着可执行文件独立于库,但也导致可执行文件较大,并且库的更新需要重新编译应用程序。
  2. 文件扩展名

    • 动态库:通常具有 .dll(在Windows系统上)或 .so(在Linux/Unix系统上)的文件扩展名。
    • 静态库:通常具有 .lib(在Windows系统上)或 .a(在Linux/Unix系统上)的文件扩展名。
  3. 内存占用

    • 动态库:多个应用程序可以共享同一个库的一个实例,因此动态库可能会在内存中存在多个副本,但通常较小。
    • 静态库:每个应用程序都包含库的一个副本,因此每个应用程序都会占用额外的内存,但库只有一个副本。
  4. 部署和维护

    • 动态库:库的更新通常只需要替换库文件,不需要重新编译应用程序。这使得更新和维护库相对容易。
    • 静态库:库的更新需要重新编译和重新部署应用程序,因为库的代码已经静态链接到应用程序中。
  5. 加载时间

    • 动态库:由于动态库在运行时加载,因此应用程序的启动速度可能较慢。
    • 静态库:由于静态库在编译时已经链接到应用程序中,因此应用程序的启动速度可能较快。

选择使用动态库还是静态库取决于项目的需求和约束。通常,动态库更适合于库的共享和更新,而静态库更适合于独立性和性能优化。在某些情况下,也可以同时使用两者,以充分利用它们的优势。

5.2 CMakelist示例

写CMakelist之前,最好把源文件放在一个地方比如src下,头文件放在一个地方比如include下,如果还有子文件夹,这个就还要自己研究下,我这边是用的简单场景,现在把我写的CMakelist放在下面作为举例,附带加上文字解释:

# 声明cmake的最低支持版本
cmake_minimum_required(VERSION 3.0)

# 编译出来的文件名称,这里可以随便取,建议跟项目相关
project(YourProjectName)

# 设置C++标准
set(CMAKE_CXX_STANDARD 11)

# 设置模式 Debug 或者 Release
set(CMAKE_BUILD_TYPE "Debug")

# 以下可以理解为变量赋值 大概为:set(变量 路径)
# 路径的依据就是如果是头文件,那么路径可以到代码中的#include"json/json.h"
# 如果是库文件,lib,那么路径直接到lib的文件夹
# ${PROJECT_SOURCE_DIR} 即为项目所在的路径
set(JSON_DIR ${PROJECT_SOURCE_DIR}/include)
set(JSON_LIB_DIR /usr/local/lib/x86_64-linux-gnu/)
set(ONNX_DIR ${PROJECT_SOURCE_DIR}/include/onnx)
set(HOME_LIB_DIR /usr/local/lib/)
set(OpenCV_INCLUDE_DIRS /usr/local/include/opencv4)

# 打印变量
message("JSON_DIR 的值是: ${JSON_DIR}")
message("ONNX_DIR 的值是: ${ONNX_DIR}")
message("JSON_LIB_DIR 的值是: ${JSON_LIB_DIR}")
message("HOME_LIB_DIR 的值是: ${HOME_LIB_DIR}")
message("OpenCV_INCLUDE_DIRS 的值是: ${OpenCV_INCLUDE_DIRS}")

# 批量替代
file(GLOB SOURCE_FILES "src/*.cpp")
file(GLOB SOURCE_INCLUDE_DIR "include/")

# 将.cpp/.c/.cc文件生成可执行文件
add_executable(${PROJECT_NAME} ${SOURCE_FILES})

# 规定.h头文件路径
include_directories(${SOURCE_INCLUDE_DIR} ${ONNX_DIR}
        ${OpenCV_INCLUDE_DIRS} ${jsoncpp_INCLUDE_DIRS} ${JSON_DIR})

# 规定.so/.a库文件路径
link_directories(${HOME_LIB_DIR} ${JSON_LIB_DIR})

# 这里要把链接的库名附上 后面一系列如libonnxruntime.so只要写onnxruntime
target_link_libraries(${PROJECT_NAME} onnxruntime jsoncpp onnxruntime_providers_cuda
        opencv_core opencv_highgui opencv_imgproc opencv_dnn opencv_imgcodecs)

六、Clion远程调试服务器的C++代码

笔者找了好久,看网上很少有这个资料,或者不愿写又或者不多人用Clion来写C++,不过对于不太写C++的人来说,界面化调试真的很友好,然后但是Clion远程调试没接触的话,又不是那么好上手,笔者这里总结一下,一来备忘,二来能帮到朋友更好~

  • 前言

Clion中调试C++重点还是CMakelist也就是上一小结,如果以前的玩家玩VS的话,这里说的Visual Stdio(不是VS对战平台哈,bushi),然后会发现有很多对应的关系,其实关键的就3个东西,一个include、一个lib、一个附加依赖项,分别对应CMakelist的include_directorieslink_directoriestarget_link_libraries,是不是还是很容易的。

  • 正儿八经配置

先进入设置
在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda
然后远程连接,先把服务器设置好,不会的话参照这篇,设置服务器跟pycharm远程时的服务器设置是一样的。

接着配置C++环境,他会自动检测,有什么问题按提示在服务器安装即可。
在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda

  • 之后在Clion上编译
    在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda
    编译之后会在项目目录下生成cmake-build-debug文件夹,这个文件夹就是远程调试的一个桥梁,并且这个文件夹下的目录也就是运行当前目录,生成的当前目录什么文件都会在这个目录下,要到项目目录需要..到上一级目录。
  • 再次编译,按截图下方的Rebuild Project即可。
  • 之后在右上角直接运行即可。
    在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda
  • 如果遇到奇奇怪怪的问题,把项目目录下的cmake-build-debug删掉,再右键项目reload cmake即可。
    在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~,深度学习,工程技术,c++,opencv,cmakelist,ubuntu,onnxruntime,cuda

以上就是全部内容,有什么问题可以评论,一起交流 ,Enjoy~文章来源地址https://www.toymoban.com/news/detail-708755.html

到了这里,关于在ubuntu18.04上编译C++版本jsoncpp/opencv/onnxruntime且如何配置CMakelist把他们用起来~的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu 18.04 交叉编译Opencv-4.6.0

    操作系统:Ubuntu 18.04 OpenCv版本:4.6.0 交叉工具链:arm-linux-gnueabihf-gcc-5.3.1 这里推荐大家到网上找OpenCV的Linux版本安装包(.tar.gz结尾),不要github上clone(clone下来的没编译通过) https://github.com/opencv/opencv/releases/tag/4.6.0 选择tar.gz源码  https://gitcode.net/mirrors/opencv/opencv_contrib 下载

    2024年02月08日
    浏览(67)
  • Ubuntu-18.04版本网络配置,连接网络的方法

    运行命令 sudo apt-get update 时出错:  好久没有Ubuntu,本来想安装一个工具,结果一顿操作后,发现网没连上。后来查了资料,才解决。 1.查看网络状态,命令行输入并运行如下代码, NetworkingEnabled=false 说明Ubuntu没有连网。  2.关闭网络服务站,命令行输入并运行如下代码:

    2024年02月11日
    浏览(58)
  • ubuntu18.04系统安装opencv及opencv_contrib

    这篇文章博主是正在学习的过程中总结的,有什么问题请各位提出,便于博主改正。 博主使用的 ubuntu 系统是 18.04 , opencv 和 opencv_contrib 均是 4.6.0 版本的,使用 Qt 编写使用opencv的程序。 安装任意版本都是通用的,如果有问题,欢迎各位提出修改建议。 1.opencv安装包 下载地

    2024年02月04日
    浏览(67)
  • Ubuntu18.04安装多个pcl、opencv3.4

    Ubuntu18.04自带pcl版本为1.8,安装位置在 /usr/include/pcl-1.8。 最近项目要求pcl1.9,考虑安装多个pcl库,根据安装目录设置选用哪个pcl。 1、下载pcl 手动pcl压缩包下载链接 终端下载如下:  -b是分支的意思,这里对应的PCL版本为1.9.1,可以根据需求在链接中寻找pcl的版本,根据实际

    2024年02月01日
    浏览(47)
  • Ubuntu18.04下opencv基础操作(打开图片及视频)

    开源计算机视觉(OpenCV)是一个主要针对实时计算机视觉的编程函数库。 OpenCV的应用领域包括: 2D和3D功能工具包 运动估计 面部识别系统 手势识别 人机交互 移动机器人 动作理解 物体识别 分割和识别 实体影像立体视觉:来自两个摄像机的深度感知 运动中的结构(SFM) 运动跟踪 增

    2024年04月17日
    浏览(32)
  • ubuntu18.04下安装vscode并配置python+opencv

     进入vscode官网 https://code.visualstudio.com/ 下载完之后直接双击下载的包可以直接安装    打开vscode点击拓展然后搜索python点击安装 (我这边已经装过了) 现在打开终端(ctrl+alt+T) 输入python 不出意外会是ubuntu自带的2.7  现在pip install 安装opencv装不到python3.6解释器 现在输入ex

    2024年02月12日
    浏览(56)
  • 在Ubuntu18.04中搭建基于QT的opencv环境

    前言 在看这篇文章之前,需要读者已经安装了qt环境如果还没有安装可以移步至这篇文章的后半断 链接: qt移植 获取cmake-gui sudo apt-get install cmake-gui 这一步主要是一会儿编译opencv的时候会用到 获取opencv的依赖环境 sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcod

    2024年01月17日
    浏览(47)
  • Ubuntu18.04编译OpenCV时遇到无法下载ADE的问题

    安装OpenCV过程中编译时出现下载ADE失败的问题 报错如下: 问题出现原因: github访问超时 解决方法: 编译时增加Cmake选项,将下载源更改为GitCode镜像

    2024年02月03日
    浏览(54)
  • Jenkins工具系列 —— 在Ubuntu 18.04上安装各种版本OpenJDK

    方式一、使用apt-get工具安装 1、安装各种JAVA版本 若要安装新版本的java11,安装命令: 若选择安装java8版本,安装命令: 若想安装其他版本可以使用通用的命令: 再使用apt-get工具安装时,需要确定系统安装包中有哪些版本可以被安装,执行命令: 2、通过上述方式安装的ja

    2024年02月14日
    浏览(39)
  • Ubuntu18.04下安装pytorch步骤&多cuda版本共存(啰嗦版)

    1.知识补充 【机器学习】显卡、GPU、NVIDIA、CUDA、cuDNN(搬运:要点如下,详细可看链接) 加 * 非重要内容,视情况执行。 显卡: 即显示卡,全称显示接口卡,是计算机最基本配置、最重要的配件之一(就像联网需网卡,数据显示在屏幕需显卡)。显卡是由 GPU 、显存等等组

    2024年02月09日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包