首页 / 操作系统 / Linux / Linux动态库编译和使用详细剖析
引言重点讲述Linux上使用gcc编译动态库的一些操作,并且对其深入的案例分析。最后介绍一下动态库插件技术, 让代码向后兼容。关于Linux上使用gcc基础编译,预编译,编译,生成机械码最后链接输出可执行文件流程参照下面。GCC编译流程 http://www.linuxidc.com/Linux/2016-03/129631.htm而本文重点是分析动态库相关的知识点. 首先看需要用到的测试素材heoo.h#ifndef _H_HEOO
#define _H_HEOO/*
* 测试接口,得到key内容
* : 返回key的字符串
*/
extern const char* getkey(void);/*
* 测试接口,得到value内容
* arg : 传入的参数
* : 返回得到的结果
*/
extern void* getvalue(void* arg);#endif // !_H_HEOOheoo-getkey.c#include "heoo.h"/*
* 测试接口,得到key内容
* : 返回key的字符串
*/
const char*
getkey(void) {
return "heoo-getkey.c getkey";
}heoo-getvalue.c#include "heoo.h"
#include <stdio.h>/*
* 测试接口,得到value内容
* arg : 传入的参数
* : 返回得到的结果
*/
const void*
getvalue(void* arg) {
const char* key = "heoo-getvalue.c getvalue";
printf("%s - %s
", key, (void*)arg);
return key;
}heoo.c#include "heoo.h"
#include <stdio.h>/*
* 测试接口,得到key内容
* : 返回key的字符串
*/
const char*
getkey(void) {
return "heoo.c getkey";
}/*
* 测试接口,得到value内容
* arg : 传入的参数
* : 返回得到的结果
*/
const void*
getvalue(void* arg) {
const char* key = "heoo.c getvalue";
printf("%s - %s
", key, (char*)arg);
return key;
}main.c#include <stdio.h>
#include "heoo.h"// 测试逻辑主函数
int main(int argc, char* argv[]) {
// 简单的打印数据
printf("getkey => %s
", getkey());
getvalue(NULL);
return 0;
}到这里也许感觉有点臃肿, 但是理解为什么是必要的. 会让你对于动态库高度高上0.01毫米的.哈哈.先让上面代码跑起来.gcc -g -Wall -o main.out main.c heoo.c测试结果如下测试完成,那就开始静态库到动态库扩展之旅.更多详情见请继续阅读下一页的精彩内容: http://www.linuxidc.com/Linux/2016-03/129632p2.htm