Linux C语言:程序运行时动态加载库函数
2017-09-25 14:55
344 查看
1:创建test.h, test.c文件
//test.h
#ifndef TEST_H_
#define TEST_H_
#include <stdio.h>
void PrintHello();
int Add(int a, int b);
#endif
2:将其编译成动态库
gcc test.c -shared -fPIC -o libtest.so
3:创建主文件main.c
//main.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <signal.h>
#include <errno.h>
//输出错误信息并退出
void error_quit(const char *str)
{
fprintf(stderr, "%s\n", str);
exit(1);
}
int main(int argc, char *argv [])
{
void *plib; //指向so文件的指针
typedef void (*FUN_HELLO)();
typedef int (*FUN_ADD)(int, int);
FUN_HELLO funHello = NULL; //函数指针
FUN_ADD funAdd = NULL;
//打开so文件
//为了方便演示,我将库文件和可执行文件放在同一个目录下
plib = dlopen("./libtest.so", RTLD_NOW | RTLD_GLOBAL);
if( NULL == plib )
error_quit("Can't open the libtest.so");
//加载函数void Hello()
funHello = dlsym(plib, "Hello");
if( NULL == funHello )
error_quit("Can't load function 'Hello'");
//加载函数int Add(int a, int b)
funAdd = dlsym(plib, "Add");
if( NULL == funAdd )
error_quit("Can't load function 'Add'");
//调用成功加载的函数
funHello();
printf("5 + 8 = %d\n", funAdd(5, 8));
//关闭so文件
dlclose(plib);
return 0;
}
4:编译,运行
gcc main.c -o main -ldl
./main
完成了,呵呵
文章出自:http://www.linuxidc.com/Linux/2013-02/78935.htm
//test.h
#ifndef TEST_H_
#define TEST_H_
#include <stdio.h>
void PrintHello();
int Add(int a, int b);
#endif
2:将其编译成动态库
gcc test.c -shared -fPIC -o libtest.so
3:创建主文件main.c
//main.c
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <signal.h>
#include <errno.h>
//输出错误信息并退出
void error_quit(const char *str)
{
fprintf(stderr, "%s\n", str);
exit(1);
}
int main(int argc, char *argv [])
{
void *plib; //指向so文件的指针
typedef void (*FUN_HELLO)();
typedef int (*FUN_ADD)(int, int);
FUN_HELLO funHello = NULL; //函数指针
FUN_ADD funAdd = NULL;
//打开so文件
//为了方便演示,我将库文件和可执行文件放在同一个目录下
plib = dlopen("./libtest.so", RTLD_NOW | RTLD_GLOBAL);
if( NULL == plib )
error_quit("Can't open the libtest.so");
//加载函数void Hello()
funHello = dlsym(plib, "Hello");
if( NULL == funHello )
error_quit("Can't load function 'Hello'");
//加载函数int Add(int a, int b)
funAdd = dlsym(plib, "Add");
if( NULL == funAdd )
error_quit("Can't load function 'Add'");
//调用成功加载的函数
funHello();
printf("5 + 8 = %d\n", funAdd(5, 8));
//关闭so文件
dlclose(plib);
return 0;
}
4:编译,运行
gcc main.c -o main -ldl
./main
完成了,呵呵
文章出自:http://www.linuxidc.com/Linux/2013-02/78935.htm
相关文章推荐
- LINUX C语言:程序运行时动态加载库函数
- Linux c语言程序运行时动态加载库函数
- Linux下用C语言检查指定程序名的运行实例个数
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
- Linux程序运行中加载动态库
- Linux下程序的加载、运行和终止流程 .
- gm8180:arm linux启动加载模块、运行程序
- Linux程序运行时找不到动态链接库的原因
- linux下生成.so并运行程序加载该.so
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
- Android程序运行中动态加载Lib的方法(二)
- gm8180:arm linux启动加载模块、运行程序
- Linux 指定程序运行加载的动态库路径
- Android程序运行中动态加载Lib的方法(一)
- Linux进程启动过程分析do_execve(可执行程序的加载和运行)---Linux进程的管理与调度(十一)
- gm8180:arm linux启动加载模块、运行程序 分类: arm-linux-Ubuntu 2013-07-22 16:30 416人阅读 评论(0) 收藏
- linux程序运行时加载共享库出现的错误
- IBM的LPI复习资料之LPI101-Topic102:Linux安装和包管理(3)管理动态链接库(查找和加载程序需要的动态链接库文件)
- [LinuxC]加载动态链接库so程序简单实例
- C语言中内存分布及程序运行加载过程