在这个例子中主要是调用了 math
库(libm.so)中的“cosf”函数,dlopen函数的第二个参数表示加载库文件的模式,主要有两种:RTLD_LAZY
暂缓决定,等有需要时再解出符号;RTLD_NOW 立即决定,返回前解除所有未决定的符号。另外记得引用包含API的头文件“#include
<dlfcn.h>”(^_^)。
#include <stdio.h>
#include <dlfcn.h>
int main(int argc, char *argv[]){
void * libm_handle = NULL;
float (*cosf_method)(float);
char *errorInfo;
float result;
// dlopen 函数还会自动解析共享库中的依赖项。这样蘑菇街
,如果您打开了一个依赖于其他共享库的对象,它就会自动加载它们。
// 函数返回一个句柄,该句柄用于后续的 API 调用
libm_handle = dlopen("libm.so", RTLD_LAZY );
// 如果返回 NULL 句柄,表示无法找到对象文件,过程结束。否则的话,将会得到对象的一个句柄,可以进一步询问对象
if (!libm_handle){
// 如果返回 NULL 句柄,通过dlerror方法可以取得无法访问对象的原因
printf("Open Error:%s.\n",dlerror());
return 0;
}
// 使用 dlsym 函数,尝试解析新打开的对象文件中的符号。您将会得到一个有效的指向该符号的指针,或者是得到一个 NULL 并返回一个错误
cosf_method = dlsym(libm_handle,"cosf");
errorInfo = dlerror();// 调用dlerror方法,返回错误信息的同时,内存中的错误信息被清空
if (errorInfo != NULL){
printf("Dlsym Error:%s.\n",errorInfo);
return 0;
}
// 执行“cosf”方法
result = (*cosf_method)(0.0);
printf("result = %f.\n",result);
// 调用 ELF 对象中的目标函数后,通过调用 dlclose 来关闭对它的访问
dlclose(libm_handle);
return 0;
}
分享到:
相关推荐
lua动态链接库的编译 c++调用lua的的方法 linux中调用lua的环境配置
文中是linux下 C++动态库 实现接口提供类导出的一个例子 注意其中使用函数返回基类指针的用法,因为Linux的动态链接库不能像MFC中那样直接导出类 一、介绍 如何使用dlopen API动态地加载C++函数和类,是Unix C++...
这个例子演示了通过mcc将.m函数编译成动态链接库供c++调用的方式实现c++和matlab的交互。具体例子介绍请结合我的博文:blog.csdn.net/arackethis/article/details/43372553
Linux下Java开发环境搭建以及加载C++动态库方法、、、
1、TensorFlow C++ API的编译是线上使用TensorFlow C++ API调用预先训练好的模型完成预测项目的必经之路...2、Linux环境下编译TensorFlow C++ API生成的动态链接库:libtensorflow_cc.so,libtensorflow_framework.so。
Linux&windows下显式调用动态库方法说明 该文档包含linux下。a和。so的调用方法以及make文件
在python程序中调用c或者c++ 的代码。本压缩文件解压后有四个文件夹,包含四个不同的调用方法。适用于linux 平台。
包含两个文件:1.c++基于openssl实现的rsa加解密动态库 2.java调用该动态库实现加解密方法
动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的...本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。
主要是linux使用C或者C++下面使用动态库方式调用json库进行解析json返回的报文。
linux的ubuntu上如何编译C和C++代码写的动态库,以及调用执行
这是linux下lua5.3调用C++动态库的一个调用实例,非常简洁实用.展现了lua调用c接口,c再调用C++类,实现自己需要的功能
linux和windows下利用lazarus开发及调用动态库的例子。
最近开始使用 robot framework 测试c++的动态库,robot framework 是跑在 windows 上面,c++动态库是跑在远程linux主机上面。测试办法是让 robot framework 通过 SSHLIbrary 库执行远程机器上面的 python 脚本,...
下面就分别总结下linux下生成并使用静态库与动态库的方法:(由于是C++项目,所以编译器用的g++,但是与gcc的使用是相通的) 首先是准备工作,把我们需要封装成库文件的函数的头文件与源文件写好,如下: //myAPI.h...
linux系统下用eclipse开发c++动态库(MyDll),并用c++程序(HelloWord)静态和动态2种方法调用动态库的例子,里面有比较详细的注释,适合初学者。
此附件包含了java代码以及vs2013编写的动态库工程。
C#可以通过P/Invoke调用C/C++写的DLL,一般在从DLL接收字符串时比较麻烦,本人在某个项目中遇到这个问题, 从DLL收读取字符串时遇到中文乱码,这里总结一下C#收取字符串时的处理。 C/C++字符串一般通过char* ...
linux环境下ini文件的读写,支持字符串、整型、浮点数三种类型。 接口简单易用。提供例子。
关于库的测试代码,使用静态库动态库 解压工具tar