歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Linux動態庫編譯和使用詳細剖析

Linux動態庫編譯和使用詳細剖析

日期:2017/3/1 9:17:28   编辑: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_HEOO

heoo-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\n", 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\n", key, (char*)arg);
return key;
}

main.c

#include <stdio.h>
#include "heoo.h"

// 測試邏輯主函數
int main(int argc, char* argv[]) {
// 簡單的打印數據
printf("getkey => %s\n", 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

Copyright © Linux教程網 All Rights Reserved