LINUX C语言:程序运行时动态加载库函数
来源:互联网 发布:vscode visual studio 编辑:程序博客网 时间:2024/05/26 15:57
PS:相关知识请自己去看man手册,这里只给出一个实例,及创建这个实例的步骤。
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
//test.cpp#include "test.h"//输出文本hello, worldvoid Hello(){printf("hello, world\n");}//返回两个参数的和int Add(int a, int b){return a + b;}
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
完成了,呵呵
- LINUX C语言:程序运行时动态加载库函数
- Linux c语言程序运行时动态加载库函数
- linux c语言库函数
- Linux程序运行中加载动态库
- C运行时库函数
- 嵌入式 Linux C语言(十)——静态库函数和动态库函数
- 在Linux下运行C语言程序
- 在Linux下运行C语言程序
- 在Linux下运行C语言程序
- C语言程序Linux下运行
- C 语言两个动态库函数重名问题
- C语言中内存分布及程序运行加载过程
- linux c/c++ C语言库函数atoi
- C语言程序调用C++库函数方法
- linux C语言库函数(部分)
- Linux C语言库函数参考 — nice
- 关于程序运行时加载动态库失败的解决方法
- 关于程序运行时加载动态库失败的解决方法
- Android4.1 关于Rotation相关的Configuration整体分析2
- h264介绍
- [Linux] ubuntu下CodeBlocks 出现的两个问题 完美解决
- uva 562 Dividing Coins
- CSS的RevealTrans动态滤镜
- LINUX C语言:程序运行时动态加载库函数
- [Linux] ubuntu 12.04 挂起后无法唤醒的问题
- LPCTSTR,LPWSTR, PTSTR, LPTSTR区别
- shell的uptime和w命令
- UBUNTU下更改shell
- 指定Struts2处理的请求后缀
- Inno Setup入门(四)——为程序创建桌面快捷方式
- 启动PowerPoint时出现Visual Studio安装
- WSN/Zigbee开源协议栈