用c语言调用动态库
来源:互联网 发布:淘宝好的大童装店铺 编辑:程序博客网 时间:2024/06/07 05:33
动态加载是在程序运行时用dlopen,dlsym函数进行的。
静态加载发生在程序装载时。
静态加载发生在程序装载时。
1.1 用c语言静态方式调用动态库libsthc.so:
/*
* ctest.c
* Testing program for libsthc.so library //测试程序为在c语言中调用libsthc.so库
* in c languange
*
*/
#include "libsthc.h" //程序中需包含头文件,程序会自动在缺省的库(/usr/lib)里寻找libsthc.so,需在makefile具体指明库名;或者放在当前文件夹;如果都不在需指明路径
{
printf("%d\n", add(1, 2));
return 0;
}
#makefile:
ctest:ctest.o
gcc ctest.o -lsthc -o ctest //-lsthc就是库名
ctest.o:ctest.c
gcc -c ctest.c -o ctest.o
all:ctest
clean:
rm -f *.o ctest
1.2 用c语言动态方式调用动态库libsthc.so:
/*cdltest.c*/
#include "stdio.h"
#include "stdlib.h"
#include "dlfcn.h" //需要此头文件
int main(void)
{
void *handle;
int (*fcn)(int x, int y);
const char *errmsg;
/* open the library */ //打开库
handle = dlopen("libsthc.so", RTLD_NOW);
if(handle == NULL)
{
fprintf(stderr, "Failed to load libsthc.so: %s\n", dlerror());
return 1;
}
dlerror();
//*(void **)(&fcn) = dlsym(handle, "add"); //ok
fcn = dlsym(handle, "add"); //ok
if((errmsg = dlerror()) != NULL)
{
printf("%s\n", errmsg);
return 1;
}
printf("%d\n", fcn(1, 5));
dlclose(handle);
return 0;
}
#makefile:
cdltest:cdltest.o
gcc cdltest.o -ldl -lsthc -o cdltest //多写了-ldl,即多需要这个库
cdltest.o:cdltest.c
gcc -c cdltest.c -o cdltest.o
all:cdltest
clean:
rm -f *.o cdltest
0 0
- 用c语言调用动态库
- C语言调用C++的动态库
- python调用c语言动态库示例
- JNA调用C语言动态链接库
- c语言调用c语言的so动态库
- Python调用C语言之如何调用动态链接库
- C语言动态函数调用
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- php调用c语言编写的so动态库
- php调用c语言编写的so动态库
- 在C#中调用C语言标准动态库方法
- Linux C语言调用C++动态链接库
- php调用c语言编写的so动态库
- Linux C语言调用C++动态链接库
- JNA调用C语言动态链接库学习实践总结
- C语言调用DLL动态链接库出错
- 泰课在线逃离地球
- poj1061 青蛙的约会 (数论,扩展欧几里得)
- 精通CSS+DIV简单小结(二)
- [工作必备]spring定时器简单的demo
- 泰课在线围住神经猫
- 用c语言调用动态库
- Android开发之文件命名规范
- Linux主机安全防护系列(二)iptables
- Microsoft.Windows.TimedScript.PropertyBagProvider
- 常见adb命令&常见错误
- 使用eclipse连接hadoop失败情况
- Linux学习之Linux常用命令整理
- Android 项目-几种常见的应用架构
- eclipse工具使用 (代码注释 工具配置)