c++将.cpp编译为.so文件
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文件相关推荐
- 把cpp编译为so_基于VSCode和CMake进行C/C++开发第三讲GCC编译器
3.0 本讲目录 本系列视频,B站首发,up主: xiaobing1016 前言: GCC 编译器支持编译 Go.Objective-C,Objective-C ++,Fortran,Ada,D 和 ...
- cpp 编译dll_GCC编译基础
资料准备: ❝ 为了方便演示和讲解,在这里提前准备好几个简单的文件:test.cpp test.h main.cpp 文件内容如下: ❞ main.cpp #include "test.h& ...
- windows下编译c语言文件路径,解决JNI在Windows环境下因长路径导致编译失败问题
之前听一个朋友反馈LuaScriptoCore在Windows下编译会报错,今天特意跑到Windows环境下测试了一番,果然是存在问题.得到了下面的编译报错信息: Build command fail ...
- cmake编译多个文件夹_cmake多目录构建(二)
前言 上一篇文章从如何构建只有一个源文件扩展到多个源文件,多个目录的构建语法,以及如何进行外部构建(out-of-source).这里回忆一下,每次构建都会生成一个CMakeFiles文件夹,当执行m ...
- MAC vscode 编译多个文件失败(已解决)
函数份文件编写,多个cpp文件没有同时编译 Undefined symbols for architecture x86_64:"swap_test(int, int)", ref ...
- VSCode 单文件编译 与 多文件编译(windows)
同一文件夹下, 单个文件(不受其他文件影响)编译生成exe文件 和 多个文件编译生成exe文件 只和tasks .json 文件有关. 此方法在根本上还是和命令行编译的原理相同. 在命令行中,编译 ...
- [旭日x3] 动手实践之bpu_rezie以及简化cpp编译流程
1.前言 在x3开发者手册里面的利用bpu进行resize的操作,便在板端上进行了测试,对比了一下bpu-resize与opencv-resize的时间差异,而且还能在裁剪的同时对裁剪的区域进行缩放. ...
- MDK的编译过程及文件类型全解——(二)
前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 本文转载自:第48章 MDK的编译过程及文件类型全解-零死角玩转STM32 ...
- 第48章 MDK的编译过程及文件类型全解
Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...
最新文章
- Three levels at which any machine carrying out an Information-Processing task must be understood
- 从《黑客帝国》说起,我们如何证明这个世界不是一个系统?
- 玩转华为云开发|老板万万没想到:刚入职的我一人就搞定人脸识别开发
- bind 启动redis_详解Redis开启远程登录连接
- matlab2c使用c++实现matlab函数系列教程-max函数
- 网络技术员所任职的不同工作
- 《深入解析Windows操作系统》- 读书笔记
- 《推荐系统实践》协同过滤算法源代码
- websockets_WebSockets简介
- log4j2关闭debug日志
- 服务器磁盘配置信息,服务器磁盘阵列配置
- 《天龙八部》地形研究
- 计算机桌面下方标图,电脑下方怎么设置显示桌面图标
- 安卓中dumpsys命令使用
- linux僵尸进程产生的原因以及如何避免产生僵尸进程
- 计算机软件著作权登记办法(2002)
- 打开计算机 访问不到d盘,电脑d盘打不开怎么办,教你电脑d盘打不开怎么办
- 达人评测 雷神911mr怎么样
- 【图文教程】用“iz3d”软件将您的游戏打造为红蓝3D游戏。
- 打交通赔偿官司需要那些证据?