国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟

這篇具有很好參考價值的文章主要介紹了【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、庫的作用

1、提高開發(fā)效率,讓開發(fā)者所有的函數(shù)實現(xiàn)不用從零開始。

2、隱藏源代碼。

????????庫其實就是所有的.o文件用特定的方式進行打包形成一個文件,各個.o文件包含了源代碼中的機器語言指令。

二、動態(tài)庫和靜態(tài)庫的制作和使用

2.1、靜態(tài)庫的制作和使用

先將我們的.c文件或者是.cpp文件形成.o文件,指令為:

gcc/g++ -c 要形成的.o文件名 .c文件

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????假設(shè)在我當(dāng)前目錄下有mystdio.o和mymath.o兩個.o文件,要將這兩個.o文件打包形成靜態(tài)庫,我們要用ar指令

ar -rc libmyc.a(名字,.a后綴表示靜態(tài)庫,真正的庫名要去掉lib,去掉.a)mystdio.o mymath.o?(跟上.o文件名)

?????????上面指令-rc中的r表示replace,c表示create,也就是說你要我形成的這個庫如果原本沒有,我就幫你形成一個新的庫,如果有了那我就把你原來舊的庫替換掉。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????此時在我當(dāng)前路徑下就有這個庫了。但是,當(dāng)我們?nèi)ゾ幾g的時候,gcc編譯器是不認識我們這個靜態(tài)庫的,gcc默認只能識別lib64目錄下的C標準庫,要讓gcc鏈接我們的庫,需要在指令中指明哪一個庫讓gcc鏈接。

gcc -o myexe(要形成的可執(zhí)行文件名) test.c(所依賴的文件) -lmyc(指明要鏈接myc這個靜態(tài)庫) -L .(-L + 路徑表示myc這個庫在哪個路徑下)

?【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

2.2、動態(tài)庫的制作和使用

fPIC:產(chǎn)生位置無關(guān)碼,在將.c或者.cpp形成.o文件時,需要加上-fPIC。要形成動態(tài)庫必須加上-fPIC。

?加上-fPIC同樣可以形成.o文件。【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

形成動態(tài)庫不需要用到其它指令,gcc編譯器就可以形成動態(tài)庫,只不過要加上-shared命令。

gcc -shared -o libmyc.so(名字,真正的庫名要去掉lib和.so) mystdio.o mymath.o(所依賴的.o文件)?

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

?????????但如果直接使用我們的這個動態(tài)庫,同樣會和我們之前使用靜態(tài)庫一樣發(fā)生鏈接錯誤。那么就同樣要告訴編譯器我們庫的名字和所在的路徑(參考上面靜態(tài)庫路徑的寫法)。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????但是,在ubuntu系統(tǒng)下你會發(fā)現(xiàn),動態(tài)庫使用靜態(tài)庫的鏈接方法我們的動態(tài)庫系統(tǒng)還是找不到(此處特制ubuntu系統(tǒng),其它系統(tǒng)可能可以正常運行),這時我們就只能將我們的動態(tài)庫拷貝到系統(tǒng)的usr/lib目錄下,因為系統(tǒng)默認尋找?guī)斓臅r候回到/usr/lib目錄下找。??

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端?此時在運行我們的程序就能正常運行了,但要注意的是,在指令的最后我們必須指明我們要鏈接的庫,因為這個庫是我們自己導(dǎo)到系統(tǒng)中的,需要我們自己指明鏈接。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

三、將自己的庫打包交給別人

?????????假設(shè)在我當(dāng)前目錄下有l(wèi)ibmyc.so動態(tài)庫,mymath.h,mystdio.h兩個頭文件,如果我想將這三個文件一起交給別人,就可以把它們打包一起放在一個目錄下,一起壓縮完再交給別人。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

?在這里我將指令全部放在makefile中

libmyc.so:mystdio.o mymath.o
        gcc -shared -o $@ $^
.o:.c
        gcc -shared -c $<
#mystdio.o:mystdio.c
#       gcc -c -fPIC $< -o $@
#mymath.o:mymath.c
#       gcc -c -fPIC $< -o $@
.PHONY:clean
clean:
        rm -f *.o libmyc.so

.PHONY:output
output:
        mkdir -p ./user/mylib/
        mkdir -p ./user/Headfile/
        cp -rf libmyc.so ./user/mylib/
        cp -rf mystdio.h mymath.h ./user/Headfile/
        tar -czf user.tgz user

四、運行別人給我的庫文件和頭文件?

????????假設(shè)我自己收到了別人的壓縮文件,里面有頭文件和庫文件,我想使用可以將頭文件拷貝到usr/include目錄下,將庫文件拷貝到usr/lib目錄下,最后指定鏈接哪一個庫,就可以使用了。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????現(xiàn)在假設(shè)user目錄是通過user.tgz解壓得到的,下面是user目錄下的文件:

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????將兩個頭文件拷貝到usr/include目錄下(編譯器默認會到include目錄下去尋找頭文件),將庫文件拷貝到usr/lib目錄下,編譯時指定庫鏈接,就能夠運行了。當(dāng)然了包含main函數(shù)的文件要自己寫啦!

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

如果今天我不將我的庫文件和頭文件拷貝到系統(tǒng)中,則需要:

gcc -o myexe test.c -I ./user/Headfile/(-I + 路徑指明要去哪里找頭文件) -L ./user/mylib/ -lmyc(-L + 路徑 + 庫名指明要去哪里找哪一個庫)

????????如果是這樣去做我們會發(fā)現(xiàn)編譯是能通過的,但當(dāng)我們要運行我們的可執(zhí)行程序時,會發(fā)現(xiàn)還是找不到庫。因為-L只是告訴gcc編譯器動態(tài)庫在哪里,但沒有告訴系統(tǒng)動態(tài)庫在哪里,所以在要運行時系統(tǒng)會找不到動態(tài)庫。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

?那如何解決呢?

方法1:添加環(huán)境變量LD_LIBRARY_PATH的搜索路徑

LD_LIBRARY_PATH變量在你的系統(tǒng)中可能有也可能沒有,如果沒有自行導(dǎo)入就行。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/sxb/240402/user/mylib(冒號后緊跟你的動態(tài)庫所在的路徑)

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端?????????但是因為命令行export是導(dǎo)入到系統(tǒng)內(nèi)存級別的環(huán)境變量中,下次登錄系統(tǒng)又會從磁盤配置文件中重新讀取環(huán)境變量,所以如果要讓你配置的這個LD_LIBRARY_PATH環(huán)境變量永久生效需要將其配置到.bashprofile文件或者.bashrc文件中。

方法2:通過軟鏈接方式

????????在usr/lib目錄下建立一個與我們的動態(tài)庫同名(記住必須要同名)的軟鏈接文件,這樣修改的是系統(tǒng)文件,是永久存在的。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

方法3:修改加載動態(tài)庫的配置文件

????????在系統(tǒng)這個目錄/etc/ld.so.conf.d/下(ld:load加載,so動態(tài)庫,conf配置文件,d目錄),建立.conf后綴的配置文件,文件里面只需要存放動態(tài)庫的路徑即可,系統(tǒng)在尋找動態(tài)庫的時候默認就會幫我們搜索該目錄下的配置文件中所保存的路徑。

????????在該目錄下創(chuàng)建一個我們自己的.conf后綴的文件

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????然后只需要在該文件中保存我們的動態(tài)庫所在的路徑?

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端?【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端

????????然后需要讓系統(tǒng)知道/etc/ld.so.conf.d/下的文件被修改過了,需要執(zhí)行l(wèi)dconfig指令,這樣我們的可執(zhí)行程序在運行時也能找到動態(tài)庫了。

【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟,linux,服務(wù)器,c語言,后端文章來源地址http://www.zghlxwxcb.cn/news/detail-854001.html

到了這里,關(guān)于【Linux】詳解動靜態(tài)庫的制作和使用&&動靜態(tài)庫在系統(tǒng)中的配置步驟的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux 動靜態(tài)庫的制作,使用和加載

    Linux 動靜態(tài)庫的制作,使用和加載

    關(guān)于動靜態(tài)庫的初步理解,我們在Linux基礎(chǔ)環(huán)境開發(fā)工具的使用(二):動靜態(tài)庫的理解,make,makefile 這篇博客中進行了詳細介紹,大家可以去看一下 今天我們直接介紹動靜態(tài)庫的制作和使用,分別站在庫的制作者和使用者的角度來分析 而我們要使用的文件就是我們在 Linux文件系列: 深

    2024年04月15日
    瀏覽(22)
  • 【linux深入剖析】深入理解軟硬鏈接 | 動靜態(tài)庫的制作以及使用

    【linux深入剖析】深入理解軟硬鏈接 | 動靜態(tài)庫的制作以及使用

    ??你好,我是 RO-BERRY ?? 致力于C、C++、數(shù)據(jù)結(jié)構(gòu)、TCP/IP、數(shù)據(jù)庫等等一系列知識 ??感謝你的陪伴與支持 ,故事既有了開頭,就要畫上一個完美的句號,讓我們一起加油 軟鏈接和硬鏈接是在Linux系統(tǒng)中常見的文件鏈接方式。 軟鏈接(Symbolic Link): 軟鏈接是一個指向目標文

    2024年04月13日
    瀏覽(25)
  • 詳解Linux下靜態(tài)庫/動態(tài)庫的生成和使用(含代碼示例和操作流程)&&動態(tài)庫和靜態(tài)庫的區(qū)別

    詳解Linux下靜態(tài)庫/動態(tài)庫的生成和使用(含代碼示例和操作流程)&&動態(tài)庫和靜態(tài)庫的區(qū)別

    關(guān)于gcc的使用方法可以參考下方鏈接博客: Linux下詳解gcc編譯過程(含代碼示例) gcc使用教程 庫是一種組件技術(shù)。 庫里封裝了數(shù)據(jù)和函數(shù),提供給用戶程序調(diào)用。 庫只執(zhí)行到第三階段編譯,沒有鏈接。 庫的使用可以使程序模塊化,提高程序的編譯速度,實現(xiàn)代碼復(fù)用。

    2024年02月15日
    瀏覽(33)
  • 動靜態(tài)庫的理解、制作、使用。

    動靜態(tài)庫的理解、制作、使用。

    1.什么是庫? 代碼是無窮無盡的,當(dāng)程序猿在寫一些項目時,未必所有代碼親歷親為,他們可以在網(wǎng)上尋找大佬寫過的一些有關(guān)需求的代碼,這些代碼可以讓他們拿過來直接使用,而省去了許多精力。 把一些 代碼進行打包 ,形成的便是庫了。 ? 上面所說,庫就是將代碼進行

    2024年01月24日
    瀏覽(56)
  • linux 系統(tǒng)中vi 編輯器和庫的制作和使用

    linux 系統(tǒng)中vi 編輯器和庫的制作和使用

    目錄 1?vim 1.1 vim簡單介紹 1.2 vim的三種模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切換到文本輸入模式 1.3.3 末行模式下的操作 2 gcc編譯器 2.1 gcc的工作流程 2.2 gcc常用參數(shù) 3 靜態(tài)庫和共享(動態(tài))庫 3.1庫的介紹 ?? 3.2靜態(tài)庫(static library) 3.3共享庫(shared library)/動態(tài)庫

    2024年02月12日
    瀏覽(23)
  • 【嵌入式學(xué)習(xí)筆記-02】什么是庫文件,靜態(tài)庫的制作和使用,動態(tài)庫的制作和使用,動態(tài)庫的動態(tài)加載

    【嵌入式學(xué)習(xí)筆記-02】什么是庫文件,靜態(tài)庫的制作和使用,動態(tài)庫的制作和使用,動態(tài)庫的動態(tài)加載

    【嵌入式學(xué)習(xí)筆記-02】什么是庫文件,靜態(tài)庫的制作和使用,動態(tài)庫的制作和使用,動態(tài)庫的動態(tài)加載 單一模型: 將程序中所有功能全部實現(xiàn)于一個單一的源文件內(nèi)部。編譯時間長,不易于維護和升級不易于協(xié)作開發(fā)。 分離模型 將程序中的不同功能模塊劃分到不同的源文件

    2024年01月15日
    瀏覽(18)
  • Linux系統(tǒng)vim,gcc,g++工具使用及環(huán)境配置,動靜態(tài)庫的概念及使用

    Linux系統(tǒng)vim,gcc,g++工具使用及環(huán)境配置,動靜態(tài)庫的概念及使用

    所屬專欄:Linux學(xué)習(xí)?? ?? 博主首頁:初陽785?? ?? 代碼托管:chuyang785?? ?? 感謝大家的支持,您的點贊和關(guān)注是對我最大的支持?。?!?? ?? 博主也會更加的努力,創(chuàng)作出更優(yōu)質(zhì)的博文?。?? 如果你的Linux下還沒有安裝vim,則執(zhí)行下面指令: sudo yum install -y vim

    2024年02月04日
    瀏覽(21)
  • 【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動態(tài)庫和靜態(tài)庫的認識

    【Linux系統(tǒng)編程】Linux下的編譯器——gcc/g++的使用 及 動態(tài)庫和靜態(tài)庫的認識

    這篇文章我們繼續(xù)學(xué)習(xí)Linux中的開發(fā)工具,今天要學(xué)的是: Linux下的編譯器——gcc/g++ 我們先來簡單了解一下它們的概念: gcc (GNU Compiler Collection) 和 g++ 是 Linux 系統(tǒng)上最常用的編譯器。它們是 GNU 組織開發(fā)的一套開源編譯器工具集。 gcc: gcc 是 GNU 編譯器集合中的 C 語言編譯器。

    2024年02月16日
    瀏覽(24)
  • [Linux]理解文件系統(tǒng)!動靜態(tài)庫詳細制作使用?。ň彌_區(qū)、inode、軟硬鏈接、動靜態(tài)庫)

    [Linux]理解文件系統(tǒng)!動靜態(tài)庫詳細制作使用!(緩沖區(qū)、inode、軟硬鏈接、動靜態(tài)庫)

    ? ? ? ? hello,大家好,這里是bang___bang_,今天來談?wù)劦奈募到y(tǒng)知識,包含有緩沖區(qū)、inode、軟硬鏈接、動靜態(tài)庫。本篇旨在分享記錄知識,如有需要,希望能有所幫助。 目錄 1??緩沖區(qū) ??緩沖區(qū)的意義 ??常見緩沖區(qū)刷新策略 ??緩沖區(qū)位置猜想 ??現(xiàn)象猜測 ??現(xiàn)象解

    2024年02月13日
    瀏覽(27)
  • C靜態(tài)庫的創(chuàng)建與使用詳解

    C靜態(tài)庫的創(chuàng)建與使用詳解

    C源程序需要經(jīng)過預(yù)處理、編譯、匯編幾個階段,得到各自源文件對應(yīng)的 可重定位目標文件 ,可重定位目標文件就是各個源文件的二進制機器代碼,一般是.o格式。比如:util1.c、util2.c及main.c三個C源文件,經(jīng)過預(yù)處理器、編譯器、匯編器的處理,就可以得到各自的目標文件u

    2024年02月08日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包