一. Makefile生成和加载so库
1. hello.h文件
#ifndef _HELLO_H
#define _HELLO_H
extern "C"{
int opencv_main(char str[]);
}
#endif
2. hello.cpp文件
#include "hello.h"
#include<opencv2/opencv.hpp> //加上函数实现需要的头文件
#include<iostream>
#include<string.h>
using namespace std;
using namespace cv;
extern "C"
cv::Mat opencv_main(char str[])
{
cout << "str=" << str << endl;
Mat Image = imread(str);
//imshow("Image", Image);
//waitKey(0);
//imwrite("0.png", Image);
return Image;
}
到现在就可以编译生成.so文件了
g++ -shared -fPIC -o libhello.so hello.cpp
运行这行命令行生成libhello.so文件
注意,-shared参数和-fPIC参数非常重要:
-shared 告诉gcc要生成的是动态链接库;
-fPIC 告诉gcc生成的生成的代码是非位置依赖的,方面的用于动态链接。
最后进行测试
3. main.cpp
#include "hello.h"
#include<iostream>
#include<string>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
char str[]="/home/zhy/Desktop/so/0783.jpg";
cv::Mat A=opencv_main(str);
imshow("Image", A);
waitKey(0);
imwrite("0.png", A);
return 0;
}
这是在本地环境下(带有OpenCV运行环境),程序的图片路径需要自己进行设置
g++ -o main main.cpp -L. -l