校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁(yè) > 知識(shí)庫(kù) > linux動(dòng)態(tài)鏈接庫(kù)使用方法分享

linux動(dòng)態(tài)鏈接庫(kù)使用方法分享

熱門標(biāo)簽:打電話機(jī)器人接我是他的秘書 揭陽(yáng)智能電話機(jī)器人推薦 百度地圖標(biāo)注錯(cuò)了有責(zé)任嗎 客服外呼系統(tǒng)怎么樣 河南信譽(yù)好的不封卡電話外呼系統(tǒng) 江蘇云電銷機(jī)器人公司 地圖標(biāo)注員都是年輕人 如果做線上地圖標(biāo)注 華鋒e路航港口地圖標(biāo)注

1、前言

在實(shí)際開發(fā)過程中,各個(gè)模塊之間會(huì)涉及到一些通用的功能,比如讀寫文件,查找、排序。為了減少代碼的冗余,提高代碼的質(zhì)量,可以將這些通用的部分提取出來(lái),做出公共的模塊庫(kù)。通過動(dòng)態(tài)鏈接庫(kù)可以實(shí)現(xiàn)多個(gè)模塊之間共享公共的函數(shù)。之前看《程序員的自我修養(yǎng)》中講到程序的鏈接和裝入過程,這些玩意都是底層的,對(duì)于理解程序的編譯過程有好處。http://www.ibm.com/developerworks/cn/linux/l-dynlink/博文介紹了程序的鏈接和裝入過程。本文重點(diǎn)在于應(yīng)用,如何編寫和使用動(dòng)態(tài)鏈接庫(kù),后續(xù)使用動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)一個(gè)插件程序。

2、動(dòng)態(tài)鏈接庫(kù)生產(chǎn)

動(dòng)態(tài)鏈接庫(kù)與普通的程序相比而言,沒有main函數(shù),是一系列函數(shù)的實(shí)現(xiàn)。通過shared和fPIC編譯參數(shù)生產(chǎn)so動(dòng)態(tài)鏈接庫(kù)文件。程序在調(diào)用庫(kù)函數(shù)時(shí),只需要連接上這個(gè)庫(kù)即可。例如下面實(shí)現(xiàn)一個(gè)簡(jiǎn)單的整數(shù)四則運(yùn)輸?shù)膭?dòng)態(tài)鏈接庫(kù),定義的caculate.h和caculate.c兩個(gè)文件,生產(chǎn)libcac.so動(dòng)態(tài)鏈接庫(kù)。

程序代碼如下:

復(fù)制代碼 代碼如下:

/*caculate.h*/

#ifndef CACULATE_HEAD_
#define CACULATE_HEAD_
//加法
int add(int a, int b);
//減法
int sub(int a, int b);
//除法
int div(int a, int b);
//乘法
int mul(int a, int b);

#endif

/*caculate.c文件*/
#include "caculate.h"

//求兩個(gè)數(shù)的和
int add(int a, int b)
{
    return (a + b);
}
//減法
int sub(int a, int b)
{
    return (a - b);
}
//除法
int div(int a, int b)
{
    return (int)(a / b);
}
//乘法
int mul(int a, int b)
{
    return (a * b);
}

編譯生產(chǎn)libcac.so文件如下: gcc -shared -fPIC caculate.c -o libcac.so
編寫一個(gè)測(cè)試程序調(diào)用此動(dòng)態(tài)鏈接庫(kù)的函數(shù),程序如下所示:

復(fù)制代碼 代碼如下:

#include stdio.h>
#include "caculate.h"

int main()
{
    int a = 20;
    int b = 10;
    printf("%d + %d = %d\n", a, b, add(a, b));
    printf("%d - %d = %d\n", a, b, sub(a, b));
    printf("%d / %d = %d\n", a, b, div(a, b));
    printf("%d * %d = %d\n", a, b, mul(a, b));
    return 0;
}

編譯生產(chǎn)可執(zhí)行文件main如下:gcc main.c -o main -L ./ -lcac   (其中-L指明動(dòng)態(tài)鏈接庫(kù)的路徑,-l后是鏈接庫(kù)的名稱,省略lib)
程序執(zhí)行結(jié)果如下所示:

3、獲取動(dòng)態(tài)鏈接庫(kù)的函數(shù)
linux提供dlopen、dlsym、dlerror和dlcolose函數(shù)獲取動(dòng)態(tài)鏈接庫(kù)的函數(shù)。通過這個(gè)四個(gè)函數(shù)可以實(shí)現(xiàn)一個(gè)插件程序,方便程序的擴(kuò)展和維護(hù)。函數(shù)格式如下所示:

復(fù)制代碼 代碼如下:

#include dlfcn.h>

void *dlopen(const char *filename, int flag);

char *dlerror(void);

void *dlsym(void *handle, const char *symbol);

int dlclose(void *handle);

 Link with -ldl.
 

dlopen()是一個(gè)強(qiáng)大的庫(kù)函數(shù)。該函數(shù)將打開一個(gè)新庫(kù),并把它裝入內(nèi)存。該函數(shù)主要用來(lái)加載庫(kù)中的符號(hào),這些符號(hào)在編譯的時(shí)候是不知道的。寫個(gè)測(cè)試程序調(diào)用上面生產(chǎn)libcac.so庫(kù)如下所示:

復(fù)制代碼 代碼如下:

#include stdio.h>
#include dlfcn.h>

#define DLL_FILE_NAME "libcac.so"

int main()
{
    void *handle;
    int (*func)(int, int);
    char *error;
    int a = 30;
    int b = 5;

    handle = dlopen(DLL_FILE_NAME, RTLD_NOW);
    if (handle == NULL)
    {
    fprintf(stderr, "Failed to open libaray %s error:%s\n", DLL_FILE_NAME, dlerror());
    return -1;
    }

    func = dlsym(handle, "add");
    printf("%d + %d = %d\n", a, b, func(a, b));

    func = dlsym(handle, "sub");
    printf("%d + %d = %d\n", a, b, func(a, b));

    func = dlsym(handle, "div");
    printf("%d + %d = %d\n", a, b, func(a, b));

    func = dlsym(handle, "mul");
    printf("%d + %d = %d\n", a, b, func(a, b));

    dlclose(handle);
    return 0;
}

程序執(zhí)行結(jié)果如下所示:gcc call_main.c -o call_main -ldl

您可能感興趣的文章:
  • Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程
  • Linux靜態(tài)鏈接庫(kù)與模板類的處理方式
  • Linux靜態(tài)鏈接庫(kù)使用類模板的快速排序算法
  • Linux下動(dòng)態(tài)鏈接庫(kù)加載路徑及搜索路徑問題

標(biāo)簽:馬鞍山 婁底 巴彥淖爾 赤峰 淘寶邀評(píng) 許昌 邵陽(yáng) 金昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《linux動(dòng)態(tài)鏈接庫(kù)使用方法分享》,本文關(guān)鍵詞  linux,動(dòng)態(tài),鏈接,庫(kù),使用方法,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《linux動(dòng)態(tài)鏈接庫(kù)使用方法分享》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于linux動(dòng)態(tài)鏈接庫(kù)使用方法分享的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    另类小说欧美激情| 日韩精品一区二区三区蜜臀| 99久久99久久免费精品蜜臀| 岛国一区二区三区| 国产ts人妖一区二区| 丁香婷婷综合五月| av在线不卡网| av在线不卡免费看| 91亚洲资源网| 一本大道av伊人久久综合| 在线视频中文字幕一区二区| 在线亚洲免费视频| 欧美日韩夫妻久久| 日韩一区二区在线观看视频| 亚洲精品在线电影| 国产女主播在线一区二区| 国产精品视频看| **欧美大码日韩| 亚洲国产美女搞黄色| 视频一区视频二区中文| 久久99热这里只有精品| 国产精品香蕉一区二区三区| 97精品久久久午夜一区二区三区 | 色综合久久88色综合天天免费| 91美女视频网站| 欧美天堂一区二区三区| 欧美精品三级日韩久久| www国产精品av| 国产精品国产三级国产aⅴ原创| 一区二区三区欧美日韩| 另类专区欧美蜜桃臀第一页| 国产在线国偷精品产拍免费yy| av毛片久久久久**hd| 欧美日韩日日摸| 久久九九影视网| 亚洲最大的成人av| 麻豆精品在线视频| 91在线免费看| 91精品国产乱| 国产精品国产三级国产aⅴ原创| 亚洲午夜免费视频| 国产一区二区主播在线| 91免费小视频| 欧美一级日韩免费不卡| 国产精品成人网| 美腿丝袜亚洲色图| 99精品视频免费在线观看| 欧美日本精品一区二区三区| 久久免费偷拍视频| 亚洲高清免费视频| 成人一道本在线| 日韩一区二区精品葵司在线 | 国产一区二区在线观看免费| 91视频xxxx| 精品久久人人做人人爽| 亚洲女同女同女同女同女同69| 久久99国产精品久久99果冻传媒| 91老司机福利 在线| 久久综合资源网| 亚洲777理论| 成人av网站在线观看免费| 538在线一区二区精品国产| 国产精品三级电影| 日韩黄色小视频| 93久久精品日日躁夜夜躁欧美| 日韩美女一区二区三区四区| 一区二区三区蜜桃网| 高清国产一区二区三区| 日韩美女在线视频| 香蕉久久一区二区不卡无毒影院| 国产jizzjizz一区二区| 日韩精品一区二区三区视频在线观看 | 欧美一级久久久| 亚洲精品一二三区| 不卡av电影在线播放| 精品国产乱码久久久久久浪潮| 亚洲一二三四久久| eeuss鲁片一区二区三区在线观看| 日韩欧美亚洲一区二区| 天天av天天翘天天综合网| 99久久夜色精品国产网站| 久久久国产午夜精品| 美女视频一区二区三区| 欧美乱妇20p| 一区二区在线看| 白白色 亚洲乱淫| 国产亚洲精品免费| 国产精品一区专区| 久久综合久久综合久久综合| 另类中文字幕网| 日韩一区二区视频| 日韩av一级电影| 欧美精品1区2区| 首页国产欧美日韩丝袜| 欧美三级日韩三级国产三级| 亚洲在线视频免费观看| 欧美系列亚洲系列| 亚洲精品成人悠悠色影视| 色综合久久综合网| 一区二区三区国产精华| 91国偷自产一区二区开放时间 | 日韩免费性生活视频播放| 日韩精品亚洲一区二区三区免费| 欧美日韩精品久久久| 亚洲成人tv网| 91精品国模一区二区三区| 人人精品人人爱| 日韩视频免费直播| 国产呦精品一区二区三区网站| 精品国产乱码久久久久久免费| 精品在线免费视频| 久久精品视频免费观看| 成人性生交大片免费看在线播放| 中文字幕欧美日韩一区| 91在线porny国产在线看| 亚洲综合小说图片| 欧美久久婷婷综合色| 久久爱另类一区二区小说| 久久久精品一品道一区| 高清av一区二区| 伊人一区二区三区| 91麻豆精品国产91久久久久久久久 | 岛国av在线一区| 亚洲欧美一区二区不卡| 欧美性videosxxxxx| 免费高清在线一区| 久久综合中文字幕| 99久久99久久精品免费看蜜桃| 一区二区在线观看免费| 欧美日韩亚洲国产综合| 蜜桃91丨九色丨蝌蚪91桃色| 久久精品一二三| 91美女视频网站| 轻轻草成人在线| 久久久综合视频| 一本大道久久精品懂色aⅴ| 日韩国产精品久久久久久亚洲| 精品国产凹凸成av人导航| 成人黄色网址在线观看| 亚洲一二三四在线观看| 久久综合久久久久88| 色诱视频网站一区| 日本欧洲一区二区| 日本一区二区三区高清不卡| 色94色欧美sute亚洲13| 久久99蜜桃精品| 国产精品另类一区| 欧美三级电影精品| 国产精品1024| 亚洲国产中文字幕在线视频综合| 精品99一区二区| 日本精品免费观看高清观看| 久久成人av少妇免费| 亚洲精品国产第一综合99久久| 欧美一区二区久久久| 91亚洲精品乱码久久久久久蜜桃| 日本在线播放一区二区三区| 中文一区二区完整视频在线观看 | 中文字幕av一区二区三区高 | 亚洲丝袜精品丝袜在线| 日韩欧美成人激情| 在线观看日韩高清av| 国产成人激情av| 日韩福利电影在线| 亚洲美女一区二区三区| 久久影院午夜论| 欧美精品v日韩精品v韩国精品v| 成人国产在线观看| 麻豆一区二区三区| 一片黄亚洲嫩模| 国产精品久久久久久妇女6080| 欧美一级二级在线观看| 色婷婷久久一区二区三区麻豆| 国产乱一区二区| 日韩电影网1区2区| 亚洲一区二区三区精品在线| 国产精品久久久久影院色老大| 精品国产91乱码一区二区三区 | 亚洲成人手机在线| 日韩理论片中文av| 欧美韩国一区二区| 久久精品夜夜夜夜久久| 日韩欧美国产1| 欧美精品亚洲二区| 欧美中文字幕一区二区三区亚洲| 不卡一区中文字幕| 国产成人免费av在线| 国产资源精品在线观看| 奇米影视7777精品一区二区| 亚洲成精国产精品女| 亚洲一区欧美一区| 一区二区视频免费在线观看| 中文字幕亚洲成人| 中文字幕在线一区免费| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 国产清纯美女被跳蛋高潮一区二区久久w| 欧美日韩极品在线观看一区| 欧美性感一区二区三区| 欧美亚洲国产bt| 欧美日韩一区二区三区在线 |