歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> 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_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