将cpp文件封装成 so 文件并调用

一、前言

    本篇记录下将 Cpp文件打包成so 文件,并在其他cpp文件中作调用

二、将cpp文件编译为so文件

在文件夹 cpp1 下创建a.h a.cpp b.h b.cpp 如下:

//a.h
#ifndef A_H_
#define A_H_
 
#include "b.h"
 
class A
{
  public:
    A(){}
    ~A(){}
 
    void showImg(char* path);
 
};
 
#endif
//a.cpp
#include "a.h"
 
void A::showImg(char* path)
{
    B b;
    b.showImg(path);
}
//b.h
#ifndef B_H_
#define B_H_
 
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
 
class B
{
  public:
    void showImg(char* path);
};
 
#endif
//b.cpp
#include "b.h"
 
void B::showImg(char* path)
{
    cv::Mat img = cv::imread(path);
    cv::imshow("Img",img);
    cv::waitKey(0);
}
编译出个so文件,将a.h a.cpp 编译出so 文件

sudo g++ -fpic -shared -o libA.so a.cpp b.cpp -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui
四、调用libA.so 文件

在文件夹 cpp2 下创建main.cpp如下:
//main.cpp
#include "a.h"
 
int main()
{
    char *path =(char*) "zxy.jpg";
    A a;
    a.showImg(path);
    return 0;
}
编译该main.cpp

一、前言

    本篇记录下将 Cpp文件打包成so 文件,并在其他cpp文件中作调用

二、将cpp文件编译为so文件

在文件夹 cpp1 下创建a.h a.cpp b.h b.cpp 如下:

//a.h
#ifndef A_H_
#define A_H_
 
#include "b.h"
 
class A
{
  public:
    A(){}
    ~A(){}
 
    void showImg(char* path);
 
};
 
#endif
//a.cpp
#include "a.h"
 
void A::showImg(char* path)
{
    B b;
    b.showImg(path);
}
//b.h
#ifndef B_H_
#define B_H_
 
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
 
class B
{
  public:
    void showImg(char* path);
};
 
#endif
//b.cpp
#include "b.h"
 
void B::showImg(char* path)
{
    cv::Mat img = cv::imread(path);
    cv::imshow("Img",img);
    cv::waitKey(0);
}
编译出个so文件,将a.h a.cpp 编译出so 文件

sudo g++ -o main main.cpp -I ../cpp1/ -L ../cpp1/ -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui -lA
四、调用libA.so 文件

在文件夹 cpp2 下创建main.cpp如下:
//main.cpp
#include "a.h"
 
int main()
{
    char *path =(char*) "zxy.jpg";
    A a;
    a.showImg(path);
    return 0;
}
编译该main.cpp

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

执行./main

出现./main: error while loading shared libraries: libA.so: cannot open shared object file: No such file or directory

找不到动态库,执行

export LD_LIBRARY_PATH=/home/zjy/testCpp/cpp1:$LD_LIBRARY_PATH,

运行./main,运行结果为:


 

执行./main

出现./main: error while loading shared libraries: libA.so: cannot open shared object file: No such file or directory

找不到动态库,执行

export LD_LIBRARY_PATH=/home/zjy/testCpp/cpp1:$LD_LIBRARY_PATH,

运行./main,运行结果为:


 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值