在新服务器上已经实现了用Python调用.so文件,现在尝试C++接口,
- 使用c++编写和使用.so动态链接库_51CTO博客_c++动态链接库
- 参考这个人的调用函数Linux C++简单生成与调用so库_秦小乙的工作台的博客-CSDN博客
- 记录在C++里面调用linux的地址直接写绝对路径就可以,不用双斜杠:string strPath = "/home/ljx/vis_process/vis/20220528024000_11.jpg";
- 字符串传递参考:C++字符串作为参数的传递 - 玩转机器学习 - 博客园 (cnblogs.com)
直接上代码:
#include<iostream>
#include<dlfcn.h>
using namespace std;
extern "C"
int main(){
void *handle = dlopen("./lib4cloudreg.so",RTLD_LAZY);
double (*ans) (char *,double);
char *error;
ans = (double(*)(char * ,double))dlsym(handle,"convert_array");
//ans = (double(*)(double))dlsym(handle,"_Z3dddd");
char strPath[] = "/home/ljx/vis_process/vis/20220528024000_11.jpg";
double ret = (*ans)(strPath ,0.1);
std::cout<<ret<<std::endl;
dlclose(handle);
return 0;
}
解释一下,我的.so文件叫lib4cloudreg.so,函数原型是:double convert_array(const char* str,double eps),所以传递了两个参数,第一个是图片在linux上面的地址,另外一个是eps的值,并接收一个返回值。
下面是操作步骤:
成功调用的步骤:
g++ mydll.cpp -fpic -shared -o lib4cloudreg.so -I /usr/local/include/opencv4 -L /usr/local/lib64 -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_calib3d -lopencv_features2d -lopencv_videoio -std=gnu++11
- 首先编译cpp生成so文件:g++ mydll.cpp -fpic -shared -o lib4cloudreg.so -I /usr/local/include/opencv4 -L /usr/local/lib64 -lopencv_core -lopencv_highgui -lopencv_imgproc -lopencv_imgcodecs -lopencv_calib3d -lopencv_features2d -lopencv_videoio -std=gnu++11
- 接着编译调用函数的cpp,生成a.out可执行文件:
文章来源:https://www.toymoban.com/news/detail-480965.html
- 最后执行./a.out即可:
文章来源地址https://www.toymoban.com/news/detail-480965.html
到了这里,关于在linux上使用C++调用动态链接库.so文件(输入两个参数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!