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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值