linux基于libtorch框架 c++工程 调用opencv库,完成打包,生成.so库,并调用

一. 生成.so库

  1. c++工程目录
    我的c++工程myProject目录结构如下:
 1. include-----det.h-----ut.h2. src-----det.cpp-----main.cpp3. build4. CMakelists.txt
  1. 编写CMakeLists.txt
cmake_minimum_required(VERSION 3.5.1)
project(myProject)set(CMAKE_CXX_STANDARD 14)
# It prevents the decay to C++98 when the compiler does not support C++14
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# It disables the use of compiler-specific extensions
# e.g. -std=c++14 rather than -std=gnu++14
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")# Try to find OpenCV
# set(OpenCV_DIR ....)
find_package(OpenCV REQUIRED)
if (OpenCV_FOUND)# If the package has been found, several variables will# be set, you can find the full list with descriptions# in the OpenCVConfig.cmake file.# Print some message showing some of themmessage(STATUS "OpenCV library status:")message(STATUS "    version: ${OpenCV_VERSION}")message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}" \n)
else ()message(FATAL_ERROR "Could not locate OpenCV" \n)
endif()set(Torch_DIR /home/xxx/Downloads/libtorch/share/cmake/Torch)
find_package(Torch REQUIRED)include_directories(OpenCV_INCLUDE_DIRS)
include_directories(Torch_INCLUDE_DIRS)
include_directories(${PROJECT_SOURCE_DIR}/include)include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/dnn/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/videoio/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/imgcodecs/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/highgui/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/imgproc/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/build)
include_directories(/home/xxx/Downloads/opencv/opencv-master/modules/core/include)
include_directories(/home/xxx/Downloads/opencv/opencv-master/include)
include_directories(/home/xxx/Downloads/libtorch/include)
include_directories(/home/xxx/Downloads/libtorch/include/torch/csrc/api/include)file(GLOB SOURCE_FILES src/*.cpp)add_library(mylib SHARED src/det.cpp include/det.h include/ut.h)
ADD_LIBRARY (mylib_static STATIC src/det.cpp include/det.h include/ut.h)target_link_libraries (${CMAKE_PROJECT_NAME}${OpenCV_LIBS}${TORCH_LIBRARIES}
)

其中总会出现找不到opencv、libtorch的一些头文件,我这里找到头文件的绝对路径,用include_directories()加进去就可以了。

  1. 执行命令生成

在工程目录myProject下,执行一下命令,生成.so文件和.a文件

mkdir build && cd build
cmake ..
make

二. 调用.so库

  1. 调用.so库的c++的工程目录
    将刚才生成的.so文件复制的lib文件夹下。
    我的调用.so库的c++工程myProject2目录结构如下:
 1. include-----det.h-----ut.h2. src-----det.cpp-----main.cpp3. build4. lib-----mylib.so-----mylib.a5. CMakelists.txt
  1. 编写CMakeLists.txt
cmake_minimum_required(VERSION 3.5.1)
project(myProject2)set(CMAKE_CXX_STANDARD 14)
# It prevents the decay to C++98 when the compiler does not support C++14
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# It disables the use of compiler-specific extensions
# e.g. -std=c++14 rather than -std=gnu++14
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")# Try to find OpenCV
# set(OpenCV_DIR ....)
find_package(OpenCV REQUIRED)
if (OpenCV_FOUND)# If the package has been found, several variables will# be set, you can find the full list with descriptions# in the OpenCVConfig.cmake file.# Print some message showing some of themmessage(STATUS "OpenCV library status:")message(STATUS "    version: ${OpenCV_VERSION}")message(STATUS "    include path: ${OpenCV_INCLUDE_DIRS}" \n)
else ()message(FATAL_ERROR "Could not locate OpenCV" \n)
endif()set(Torch_DIR /home/xxx/Downloads/libtorch/share/cmake/Torch)
find_package(Torch REQUIRED)include_directories(OpenCV_INCLUDE_DIRS)
include_directories(Torch_INCLUDE_DIRS)
include_directories(${PROJECT_SOURCE_DIR}/include)set(LIB_DIR /home/xxx/vsProjects/myProject2/lib)
#链接库路径
link_directories(${LIB_DIR})
file(GLOB SOURCE_FILES src/*.cpp)
add_executable(${CMAKE_PROJECT_NAME} ${SOURCE_FILES})
target_link_libraries (${CMAKE_PROJECT_NAME}${OpenCV_LIBS}${TORCH_LIBRARIES}${PROJECT_SOURCE_DIR}/lib/mylib.so
)
  1. 执行命令生成

在工程目录myProject2下,执行一下命令生成可执行文件并运行:

mkdir build && cd build
cmake ..
make
./myProject2
  1. 各个 .cpp 和 .h文件示例
    ut.h 文件
#pragma once
enum Det {x = 0,y = 1,w = 2,h = 3,s = 4,
};

det.h 文件

#ifndef DET_H
#define DET_H// 打印 Hello World!
void hello();

det.cpp 文件

   #include <iostream>#include "det.h"void hello() {std::cout << "Hello, World!" << std::endl;}

main.cpp 文件调用.so库里面的文件

 #include <iostream>
#include "det.h"
using std::cout;
using std::endl;int main() {hello();cout << "1 + 2 = " << sum(1,2) << endl;cout << "1 + 2 + 3 = " << sum(1,2,3) << endl;return 0;
}

参考链接

链接: link.
https://blog.csdn.net/cindywry/article/details/86063930

linux生成.so库,调用.so库函数相关推荐

  1. 【Linux】静态库与动态库的生成及调用

    一,库:一种可执行代码的二进制形式,可以被载入内存执行.其中库分为静态库.动态库 二,静态库和动态库的区别          1)Linux 下静态库:名字一般为 lib***.a利用静态函数库编译成 ...

  2. linux下生成静态库和动态库

    linux下生成静态库和动态库 一.动态库.静态库简介 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常.本质上 ...

  3. 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...

    一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要i ...

  4. linux 生成和使用动态链接库和静态链接库的Makefile编写

    引用 Jesse Rei 的 linux 生成和使用动态链接库和静态链接库的Makefile编写 生成和使用动态链接库和静态链接库的Makefile编写 1. 概述 介绍linux下生成和使用动态链接 ...

  5. 简述linux中动态库和静态库的制作调用流程

    假设现在有这些文件:sub.c add.c div.c mul.c mainc head.h(前4个.C文件的头文件) 1.静态库制作流程         gcc -c  sub.c add.c di ...

  6. go语言调用c 的头文件 so,Golang生成共享库(shared library)以及Golang生成C可调用的动态库.so和静态库.a...

    Golang类似于C的静态语言,效率也接近于C,如果Golang也可以导出可供C调用的库,那可以和很多高级语言say goodbye了,goodbye似乎又有点武断,但至少说,Golang可以做很多事 ...

  7. 在Linux下如何使用GCC编译程序、简单生成静态库及动态库。

    在Linux下如何使用GCC编译程序.简单生成 静态库及动态库.   本文适用于Linux下开发初学者.本文初步讲解在Linux下如何使用GCC编译程序.简单生成静态库及动态库. 一.关于安装.一般系 ...

  8. c语言调用c 的库,C语言程序调用C库函数方法

    C语言程序调用C 库函数方法,关键是函数名字解析问题. 其实实现起来不是很难. 使用关键字 extern \"C\" 可以使得C 编译器生成的函数名满足C语言的要求 例子如下: 链 ...

  9. Linux系统上库文件的生成与使用(静态库和动态库)

    目录 1.什么是库文件? 2.静态库的生成与使用 2.1.生成 .o 文件 2.2.创建静态库 2.3.使用静态库 3.动态(共享)库的生成与使用 3.1.生成 .o 文件 3.2.生成动态库文件 3 ...

  10. Linux下动态库和静态库制作与调用

    Linux下动态库和静态库制作与调用 1.动态库和静态库简介   静态库是指在应用中,有一些公共代码需要反复使用,就把这些代码编译为"库"文件:在链接步骤中,连接器将从库文件取得所 ...

最新文章

  1. 《女性的选择》--[日]今野由梨
  2. php-screw下载,php_screw安装和使用
  3. 贝叶斯估计和最大后验估计
  4. springBoot静态资源处理
  5. 计算机系统结构sw指令集,《深入理解计算机系统》第三章学习笔记
  6. c# 因其保护级别而不可访问。只能处理公共类型。
  7. 计算机b级英语翻译,英语B级考试翻译必备常用短句
  8. 同步方法 调用异步防范_Spring一个注解实现方法的异步调用,再也不用单开线程了...
  9. php中嵌套调用的原理,嵌套调用
  10. python中保留两位小数的编写程序_P081 保留两位小数
  11. chmod是linux命令吗,Linux chmod命令怎么用
  12. 安卓真机测试遇到的检测不到安卓设备的问题
  13. SPOJ Can you answer the Queries系列
  14. 微分销机制设计_免费快速搭建微信分销商城_OctShop源码
  15. 刺客信条3重制版修改器|刺客信条3重制版十项修改器风灵月影版下载
  16. 互联网寒冬怎么过?一程序员裸辞之后,找不到理想的工作,慌的很
  17. nodejs断言库_断言库的比较
  18. iOS 音乐播放器之锁屏歌词+歌词解析+锁屏效果
  19. 转载:SyncToy安装使用详解
  20. python:考试前,练手习题(斐波那契数,字符串排序,九九乘法表,水仙花数,求和...求数字倍数,(保佑不挂科!)

热门文章

  1. mysql怎么给root设密码_mysql给root设置密码
  2. 谷歌SEO专业术语指南
  3. Spark stand a lone 模式
  4. 图计算的黄金时代 知识图谱背后的数据价值
  5. 单片机动态从00到99C语言,单片机00~99秒表显示
  6. 1004 成绩排名 (20 分)
  7. python必背的英语单词怎么写_背英语单词的最好方法
  8. 国产超级英雄逆袭好莱坞
  9. 针对于网站被黑被劫持了的解决办法、网站被劫持了怎么办
  10. K-means(tri)利用三角不等式性质加速k-means