在linux上使用C++调用动态链接库.so文件(输入两个参数)

这篇具有很好参考价值的文章主要介绍了在linux上使用C++调用动态链接库.so文件(输入两个参数)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在新服务器上已经实现了用Python调用.so文件,现在尝试C++接口,

  1. 使用c++编写和使用.so动态链接库_51CTO博客_c++动态链接库
  2. 参考这个人的调用函数Linux C++简单生成与调用so库_秦小乙的工作台的博客-CSDN博客
  3. 记录在C++里面调用linux的地址直接写绝对路径就可以,不用双斜杠:string strPath = "/home/ljx/vis_process/vis/20220528024000_11.jpg";
  4. 字符串传递参考: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
  1. 首先编译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

在linux上使用C++调用动态链接库.so文件(输入两个参数)

  1. 接着编译调用函数的cpp,生成a.out可执行文件:

在linux上使用C++调用动态链接库.so文件(输入两个参数)

  1. 最后执行./a.out即可:

在linux上使用C++调用动态链接库.so文件(输入两个参数)文章来源地址https://www.toymoban.com/news/detail-480965.html

到了这里,关于在linux上使用C++调用动态链接库.so文件(输入两个参数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux上x86_64架构的动态链接器 ld-linux-x86-64.so.2

    /lib64/ld-linux-x86-64.so.2 是Linux操作系统上x86_64架构的动态链接器(也称为动态链接编辑器)。它负责加载和链接在运行时(即程序启动时或之后)被引用的动态库。现在,我们来深入了解其作用和重要性: 动态链接器的作用 : 当运行一个可执行程序时,该程序可能依赖于多个动

    2024年02月02日
    浏览(53)
  • aarch64-linux-gcc安装编译及生成so动态库和调用

    官方二进制下载 Ubuntu packages 提供了软件包: gcc-arm-linux-gnueabihf (4:7.4.0-1ubuntu2.3 以及其他的) 。 建议直接从 linaro 的官网下载相应版本的 gcc-linaro 交叉编译工具,并直接选择带有二进制的文件,即在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch

    2024年02月13日
    浏览(58)
  • Unity——在C#中调用C++动态链接库(DLL)

    1、新建C++空项目 打开VS,新建一个C++空项目,自命名项目名称与位置。 2、配置项目属性为动态链接库 右键项目,点击属性,打开项目属性页,将常规中的配置类型改为动态库(.dll)。  3、添加.h头文件 右键头文件,点击添加—新建项,选择头文件.h,命名为DllForUnity.h,点击

    2024年02月10日
    浏览(46)
  • VS2022环境下C++ DLL动态链接库的编写和调用

    1、新建动态链接库项目 2、新建类 3、宏定义 4、使用宏定义修饰类 调用DLL动态链接库大致有两种方法: 一种是“隐式调用”,需要.h头文件、.lib符号文件、.dll动态库文件; 一种是“显示调用”,需要.dll动态库文件; 此处介绍第一种调用方式。 1、创建项目 2、项目属性

    2024年02月14日
    浏览(50)
  • 分析linux中动态库so文件的常用方法

    在linux系统中,我们经常会遇到各种各样的动态库文件,常见的是.so后缀,那么我们应该如何分析这些文件的用途和作用呢?毕竟我们不能一知半解的“搞事情”。 首先,我们从整体上了解一下该文件的基础属性,此时可以使用file命令,示例用法如下图所示: 通过执行结果

    2024年02月09日
    浏览(43)
  • Android Studio 进行NDK开发,实现JNI,以及编写C++与Java交互(Java调用本地函数)并编译出本地so动态库

    1.首先认识一下NDK。 (1)什么是NDK? NDK全称是Native Development Kit,NDK提供了一系列的工具,帮助开发者快速开发C/C++的动态库,并能自动将so和java应用一起打包成apk。NDK集成了交叉编译器(交叉编译器需要UNIX或LINUX系统环境),并提供了相应的mk文件隔离CPU、平台、ABI等差异,

    2024年02月11日
    浏览(49)
  • Rust:使用libloader调用动态链接库 (DLL)

    掘金为同人创作:掘金 最近需要使用Rust 动态调用 动态链接库,本来打算是使用 libloading 的,但是 libloading 在调用dll中的函数的时,是必须要在编译时确定参数和return的类型的。但后来发现了 libloader 这个包包, libloader 是基于 libloading 的,但是操作起来却比 libloader 方便。

    2023年04月10日
    浏览(50)
  • Python 使用 ctypes 调用 C/C++ DLL 动态链接库

    ctypes 有以下优点: Python内建,不需要单独安装 Python可以直接调用C/C++ 动态链接库(.dll 或 .so) 在Python一侧,不需要了解 c/c++ dll 内部的工作方式 提供了 C/C++ 数据类型与Python类型的相互映射,以及转换,包括指针类型。 ctypes 在下列场景可以发挥较大作用 运算量大的操作可以写

    2024年02月06日
    浏览(51)
  • 网络安全---Ring3下动态链接库.so函数劫持

    1.1、原理 Unix操作系统中,程序运行时会按照一定的规则顺序去查找依赖的动态链接库,当查找到指定的so文件时,动态链接器(/lib/ld-linux.so.X)会将程序所依赖的共享对象进行装载和初始化,而为什么可以使用so文件进行函数的劫持呢? 这与LINUX的特性有关,先加载的so中的全局

    2024年02月11日
    浏览(38)
  • 【库函数】Linux下动态库.so和静态库.a的生成和使用

    目录 🌞1. Linux下静态库和动态库的基本概念 🌞2. 动态库 🌊2.1 动态库如何生成 🌍2.1.1 文件详情 🌍2.1.2 编译生成动态库 🌊2.2 动态库如何使用 🌍2.2.1 案例 🌍2.2.2 动态库错误记录 🌞3. 静态库 🌊3.1 静态库如何生成 🌍3.1.1 文件详情 🌍3.1.2 编译生成动态库 🌊3.2 静态库如

    2024年04月25日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包