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

首頁 > 系統 > Linux > 正文

Linux下動態庫生成和使用

2024-06-28 13:25:02
字體:
來源:轉載
供稿:網友
linux下動態庫生成和使用Linux下動態庫生成和使用一.動態庫的基本概念

1.動態鏈接庫是程序運行時加載的庫,當動態鏈接庫正確安裝后,所有的程序都可以使用動態庫來運行程序。動態鏈接庫是目標文件的集合,目標文件在動態鏈接庫中的組織方式是按照特殊方式形成的。庫中函數和變量的地址是相對地址,不是絕對地址,其真實地址在調用動態庫的程序加載時形成。

2.動態鏈接庫的名稱有別名(soname),真名(realname)和鏈接名(linkername)。別名由一個前綴lib,然后是庫的名字,再加上一個后綴“.so”構成。真名是動態鏈接庫真實名稱,一般總是在別名的基礎加上一個小版本號,發布版本等構成。除此之外,還有一個鏈接名,即程序鏈接時使用的庫的名字。

3.在動態鏈接庫安裝的時候,總是復制文件到某個目錄下,然后用一個軟連接生成別名,在庫文件進行更新的時候,僅僅更新軟鏈接即可。

二.生成和使用動態庫

1.看一個實例來了解如何自己生成靜態庫和使用靜態庫

1>在test文件夾下有三個文件:main.c,add.c,sub.c,tiger.h

2>main.c文件中的內容:

#include<stdio.h>#include”tiger.h”int  main(void){    PRintf(“sum =%d/n”,add(5,3));    printf(“sub= %d/n”,sub(5,3));    return 0;       }

3>.tiger.h文件中的內容:

#ifndef __TIGER__#define __TIGER__int add(int  a,int  b);int sub(int  a,int  b);#endif

4>.add.c文件中的內容

int  add(int  a, int b){       return a +b;}

5>.sub.c文件中的內容

int  sub(int  a, int b){       return  a - b;}

動態庫的生成

1>首先生成目標文件,但是此時要加編譯器選項-fpic和鏈接器選項-shared,

gcc-fpic-cadd.c

gcc-fpic-csub.c

生成中間文件add.o和sub.o

2>其次生成動態庫

gcc-shared–olibtiger.soadd.osub.o

生成動態庫libtiger.so,libtiger.so就是我們生成的目標動態庫。我們以后使用動態庫和main.c程序生成可執行程序

說明:

以上兩部也可以合成一步搞定:

gcc-fpic-sharedadd.csub.c-olibtiger.so

2.使用動態鏈接庫

在編譯程序時,使用動態鏈接庫和靜態庫是一致的,使用”-l庫名”的方式,在生成可執行文件的時候會鏈接庫文件。

1>使用命令:

gcc-omainmain.c-L./-ltiger

2>-L指定動態鏈接庫的路勁,-ldtiger鏈接庫函數tiger。-ltiger是動態庫的調用規則。Linux系統下的動態庫命名方式是lib*.so,而在鏈接時表示位-l*,*是自己命名的庫名。

3>但是程序會提示如下錯誤

errorwhileloadingsharedlibraries:libtiger.so:cannotopensharedobjectfile:Nosuchfileordirect

這是因為程序運行時沒有找到動態鏈接庫造成的。程序編譯時鏈接動態庫和運行時使用動態鏈接庫的概念是不同的,在運行時,程序鏈接的動態鏈接庫需要在系統目錄下才行。

4>使用以下方法可以解決此問題

a.在linux下最方便的解決方案是拷貝libtiger.so到絕對目錄/lib下(但是,要是超級用戶才可以,因此要使用sudo哦,親)。就可以生成可執行程序了

b.第二種方法是:將動態鏈接庫的目錄放到程序搜索路徑中,可以將庫的路徑加到環境變量LD_LIBRARY_PATH中實現:

exportLD_LIBRARY_PATH=’pwd’:$LD_LIBRARY_PATH

執行此命令后也可以生成可執行程序

原文地址:linux下動態庫生成和使用


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 田阳县| 伊吾县| 若尔盖县| 侯马市| 芒康县| 乳山市| 滦南县| 色达县| 沅江市| 陈巴尔虎旗| 永定县| 滦平县| 桓台县| 平南县| 克拉玛依市| 托克逊县| 克山县| 福安市| 桓仁| 米林县| 白水县| 五莲县| 乌海市| 普陀区| 宝鸡市| 土默特左旗| 三都| 高邑县| 成武县| 石楼县| 商都县| 长沙县| 珲春市| 石首市| 万盛区| 韶关市| 奇台县| 仁怀市| 龙游县| 新蔡县| 青浦区|