Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / 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