国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

linux_3 庫文件的使用

2019-11-08 01:56:49
字體:
來源:轉載
供稿:網友

1

1.1共享庫的文件的生成和調用步驟

(1)共享庫文件的生成步驟

    a.編寫源程序xxx.c,如:vi add.c

    b.只編譯不鏈接生成xxx.o,如:

        cc -c -fpic/*小模式*/add.c

    c.生成共享庫文件

        cc -shared 目標文件 -o lib庫名.so

        cc -shared add.o -o libadd.so

(2)共享庫文件的使用步驟

    a.編寫測試源程序xxx.c,如:vi mian.c

    b.只編譯不鏈接生成目標文件xxx.c,如

    cc -c main.c

    c.鏈接測試文件和共享文件,方式有三種:

    (1)直接鏈接

        cc main.o libadd.so

    (2)使用編譯選項進行鏈接

    cc main.o -l add -L.

    (3)配置環境變量LIBRARY_PATH:.

    exPRot LIBRARY_PATH=$LIBRARY_PATH:.

    cc main.o -l add

注意:

    使用共享庫文件時,切記需要配置環境變量

    export LD_LIBRARY_PATH$=LD_LIBRARY_PATH:.

    上述指令用于解決運行時,加載不到共享庫的問題

擴展:

ls -l libadd.so

-           rwx         rxw             r-w

文件類型  屬主權限    屬組權限     其他用戶權限

1           tarena      tarena          6654

硬鏈接數  屬主名稱    屬組名稱      文件大小

12月  2 09:47      libadd.so

文件最后一次修改時間 文件名稱

 

其中文件的常見類型如下:

    -表示普通規則文件

    d表示目錄文件

其中文件的權限解析如下:

    r讀權限     4

    w寫權限     2

    x執行權限   1

    -沒有此權限 0

1.2共享庫的動態加載

    (1)dlopen函數

    #include <dlfcn.h>

    void *dlopen(const char *filename, intflag);

第一個參數:常量字符串形式的文件名,共享庫文件名

第二個參數:標志位

    RTLD_LAZY 延遲加載

    RTLD_NOW 立即加載

返回值:

    成功返回共享庫的句柄,失敗返回NULL

函數功能:

    主要用于加載第一個參數指定的共享文件

注意:

    在編譯鏈接時增加選項:-ldl

(2)dlsym函數

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

第一個參數:

    共享庫句柄,dlopen函數的返回值

第二個參數:

    字符串形式的符號,一般指定函數名

返回值:

    成功返回符號在內存中的地址,失敗返回NULL

函數功能:

    根據句柄和符號來查找symbol在內存中的地址

(3)dlclose函數

    int dlclose(void* handle);

函數功能:

    主要用與關閉參數指定的共享庫

返回值:

    成功返回0,失敗返回非0

(4)dlerror函數

    char *dlerror(void);

函數功能:

    主要功能用于獲取dlopen()/dlsym()/dlclose()調用之后的最后一個錯誤信息,如果沒發生錯誤,則返回NULL


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴林右旗| 崇信县| 新竹市| 宜兰市| 潜江市| 涡阳县| 朝阳县| 永德县| 绍兴县| 章丘市| 团风县| 南澳县| 扶绥县| 江油市| 株洲市| 临海市| 阿拉尔市| 增城市| 来安县| 洮南市| 宁波市| 红原县| 杭锦后旗| 波密县| 新闻| 清水河县| 博罗县| 区。| 景洪市| 定日县| 沭阳县| 丹阳市| 祁门县| 宁陕县| 兰考县| 启东市| 瑞昌市| 渑池县| 汨罗市| 黔江区| 瑞昌市|