1.首先看文件形式

其中cpp1是直接调用.cpp和生成.so的文件夹。

cpp2是测试生成的.so可以使用的文件夹。

2.先直接编译.cpp检查代码没问题

a.cpp内容:

#include <iostream>
#include "a.h"void A::readImg(char* path)
{B b;b.readImg(path);}

a.h内容:

#ifndef A_H_
#define A_H_#include "b.h"class A
{public:A(){}~A(){}void readImg(char* path);};#endif

b.cpp内容:

#include "b.h"void B::readImg(char* path)
{cv::Mat img = cv::imread(path);std::cout<<"图像宽为:"<<img.cols<<"\t高度为:"<<img.rows<<"\t通道数为:"<<img.channels()<<std::endl;
}

b.h内容

#ifndef B_H_
#define B_H_#include <opencv2/opencv.hpp>
class B
{public:void readImg(char* path);
};#endif

main.cpp内容

//main.cpp
#include "a.h"int main()
{char *path =(char*) "test.jpg";A a;a.readImg(path);return 0;
}

CMakeLists.txt内容:

cmake_minimum_required(VERSION 2.6)project(cpp1)add_definitions(-std=c++11)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)find_package(OpenCV REQUIRED)
include_directories(OpenCV_INCLUDE_DIRS)add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp a.cpp b.cpp)
target_link_libraries(main ${OpenCV_LIBS})add_definitions(-O2 -pthread)

make以后生成可执行文件main,可打印如下信息,说明整个代码都是没问题的。

执行./main

3.在cpp2调用.so文件

首先在cpp1下生成.so文件(注意.so文件要以lib开头,在使用的时候要把lib去掉)

g++ -fpic -shared -o libCPP1.so a.cpp b.cpp -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui

生成libCPP1.so文件。

新建cpp2文件夹,将cpp1的main.cpp, .h文件和libCPP1.so拷贝进来。

第一种执行方式:

g++ -o ./main -std=c++11 main.cpp -L ./  -lCPP1

即可生成可执行文件main,打印一下,发现结果一样,说明生成的.so文件成功.

执行./main

第二种执行方式:

CMakeLists.txt内容: 将生成的.so路径作为可链接库

cmake_minimum_required(VERSION 2.6)project(cpp2)add_definitions(-std=c++11)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)# find_package(OpenCV REQUIRED)
# include_directories(OpenCV_INCLUDE_DIRS)add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp)
# target_link_libraries(main ${OpenCV_LIBS})
target_link_libraries(main ${OpenCV_LIBS} /home/fzh/AI/learn_cplus/learn_some_api/cpp2/libCPP1.so)
add_definitions(-O2 -pthread)

cmake以后在make生成可执行文件main,说明编译成功。

执行./main

c++将.cpp编译为.so文件相关推荐

  1. 把cpp编译为so_基于VSCode和CMake进行C/C++开发第三讲GCC编译器

    3.0 本讲目录 本系列视频,B站首发,up主: xiaobing1016 前言: GCC 编译器支持编译 Go.Objective-C,Objective-C ++,Fortran,Ada,D 和 ...

  2. cpp 编译dll_GCC编译基础

    资料准备: ❝ 为了方便演示和讲解,在这里提前准备好几个简单的文件:test.cpp test.h main.cpp 文件内容如下: ❞ main.cpp #include "test.h& ...

  3. windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题

    之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...

  4. cmake编译多个文件夹_cmake多目录构建(二)

    前言 上一篇文章从如何构建只有一个源文件扩展到多个源文件,多个目录的构建语法,以及如何进行外部构建(out-of-source).这里回忆一下,每次构建都会生成一个CMakeFiles文件夹,当执行m ...

  5. MAC vscode 编译多个文件失败(已解决)

    函数份文件编写,多个cpp文件没有同时编译 Undefined symbols for architecture x86_64:"swap_test(int, int)", ref ...

  6. VSCode 单文件编译 与 多文件编译(windows)

    同一文件夹下, 单个文件(不受其他文件影响)编译生成exe文件  和  多个文件编译生成exe文件 只和tasks .json 文件有关. 此方法在根本上还是和命令行编译的原理相同. 在命令行中,编译 ...

  7. [旭日x3] 动手实践之bpu_rezie以及简化cpp编译流程

    1.前言 在x3开发者手册里面的利用bpu进行resize的操作,便在板端上进行了测试,对比了一下bpu-resize与opencv-resize的时间差异,而且还能在裁剪的同时对裁剪的区域进行缩放. ...

  8. MDK的编译过程及文件类型全解——(二)

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 本文转载自:第48章 MDK的编译过程及文件类型全解-零死角玩转STM32 ...

  9. 第48章 MDK的编译过程及文件类型全解

    Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...

最新文章

  1. Three levels at which any machine carrying out an Information-Processing task must be understood
  2. 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
  3. 玩转华为云开发|老板万万没想到:刚入职的我一人就搞定人脸识别开发
  4. bind 启动redis_详解Redis开启远程登录连接
  5. matlab2c使用c++实现matlab函数系列教程-max函数
  6. 网络技术员所任职的不同工作
  7. 《深入解析Windows操作系统》- 读书笔记
  8. 《推荐系统实践》协同过滤算法源代码
  9. websockets_WebSockets简介
  10. log4j2关闭debug日志
  11. 服务器磁盘配置信息,服务器磁盘阵列配置
  12. 《天龙八部》地形研究
  13. 计算机桌面下方标图,电脑下方怎么设置显示桌面图标
  14. 安卓中dumpsys命令使用
  15. linux僵尸进程产生的原因以及如何避免产生僵尸进程
  16. 计算机软件著作权登记办法(2002)
  17. 打开计算机 访问不到d盘,电脑d盘打不开怎么办,教你电脑d盘打不开怎么办
  18. 达人评测 雷神911mr怎么样
  19. 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
  20. 打交通赔偿官司需要那些证据?

热门文章

  1. 史上最简单的隐马尔可夫模型讲解
  2. Leaf:美团分布式ID生成服务开源 1
  3. 【python】详解类class的继承、__init__初始化、super方法
  4. Android官方开发文档Training系列课程中文版:高效显示位图之管理位图内存
  5. day21 面向对象之继承和组合
  6. WPF中自动增加行(动画)的TextBox
  7. MySQL快速生成连续整数
  8. 1.2 - 列表练习题
  9. Prototype模式
  10. 18 4Sum(寻找四个数之和为指定数的集合Medium)