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

C語(yǔ)言 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)生成

這篇具有很好參考價(jià)值的文章主要介紹了C語(yǔ)言 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)生成。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

文件目錄結(jié)構(gòu)

tree
.
├── bin
├── include
│?? └── calc.h
├── lib
│?? ├── add.c
│?? ├── div.c
│?? ├── mul.c
│?? └── sub.c
└── src
    └── main.c
4 directories, 6 files

靜態(tài)庫(kù)生成

使用ar命令
ar命令用于創(chuàng)建和管理靜態(tài)庫(kù)。下面是使用ar命令生成靜態(tài)庫(kù)的步驟:

# 編譯源文件為目標(biāo)文件(.o文件)
gcc -c ./lib/*.c
mv *.o ./bin

# 使用ar命令創(chuàng)建靜態(tài)庫(kù)文件(.a文件):
ar rcs libcalc.a ./bin/*.o
mv libcalc.a ./lib

gcc src/main.c -I include/ -L lib/ -lcalc -o bin/main

MAIN ENTRY
please input m and n:
7 2
add:
7+2=9
sub:
7-2=5
mul:
7x2=14
div:
7/2=3

動(dòng)態(tài)庫(kù)生成

# 編譯源文件為目標(biāo)文件(.o文件)
#-fPIC標(biāo)志用于生成位置無(wú)關(guān)代碼,位置無(wú)關(guān)代碼是一種可執(zhí)行或共享庫(kù)的代碼,可以在內(nèi)存的任何位置加載并運(yùn)行,而不依賴于特定的內(nèi)存地址。這在生成共享庫(kù)(動(dòng)態(tài)鏈接庫(kù))時(shí)特別重要,因?yàn)楣蚕韼?kù)需要能夠在不同的進(jìn)程和內(nèi)存地址中加載,而不會(huì)發(fā)生沖突或錯(cuò)誤。
gcc -c -fPIC lib/*.c
mv *.o ./bin

gcc ./bin/*.o -shared -o lib/libcalc.so

gcc src/main.c -I include/ -L lib/ -lcalc -o bin/main

./main: error while loading shared libraries: libcalc.so: cannot open shared object file: No such file or directory
執(zhí)行直接報(bào)錯(cuò)了,說(shuō)明系統(tǒng)沒(méi)有找到庫(kù)位置
而動(dòng)態(tài)庫(kù)的搜索路徑搜索的先后順序是:
  1.編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑
  2.環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫(kù)搜索路徑
  3.配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑
  4.默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib or /usr/lib

#1 編譯目錄到指定動(dòng)態(tài)庫(kù)路徑
gcc src/main.c -I include/ -L lib/ -Wl,-rpath="/home/xxx/prj/lee
tcode/src/test/libtest/lib" -lcalc -o ./bin/main

#2 指定環(huán)境變量正常執(zhí)行
export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH

#3 配置文件/etc/ld.so.conf添加庫(kù)路徑
# /home/xxx/prj/leetcode/src/test/libtest/lib
sudo vim /etc/ld.so.conf
sudo ldconfig #更新動(dòng)態(tài)鏈接器緩存

#4 放入到/usr/lib正常執(zhí)行
sudo mv lib/libcalc.so /usr/lib

如果同時(shí)存在動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)文件,系統(tǒng)會(huì)優(yōu)先選中動(dòng)態(tài)庫(kù)

參考鏈接

gcc 使用中常用的參數(shù)及命令
動(dòng)態(tài)庫(kù)加載路徑之RPATH與RUNPATH(小記)
GCC創(chuàng)建和使用靜態(tài)鏈接庫(kù)(.a文件)
Options for Linking
Creating and Using Dynamic Libraries ( C )
linux查看、添加、刪除環(huán)境變量文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-710205.html

到了這里,關(guān)于C語(yǔ)言 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)生成的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    目錄 制作靜態(tài)庫(kù) ar命令 使用makefile制作靜態(tài)庫(kù) 如何發(fā)布自己的靜態(tài)庫(kù)給別人呢? 如何使用靜態(tài)庫(kù)呢? 方法一 方法二 制作動(dòng)態(tài)庫(kù) 使用動(dòng)態(tài)庫(kù)遇到的問(wèn)題 上面的問(wèn)題如何解決呢?(如何使用動(dòng)態(tài)庫(kù)) 1.方法一 2.方法二 3.方法三 4.方法四 搜索優(yōu)先級(jí) Linux默認(rèn)頭文件的搜索順序

    2024年02月03日
    瀏覽(22)
  • 【Linux】動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

    【Linux】動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

    軟鏈接 命令: ln -s 源文件名 目標(biāo)文件名 軟鏈接是獨(dú)立連接文件的,他有自己的inode number,有自己的inode屬性和內(nèi)容。 軟鏈接內(nèi)部存放的是自己所指向文件的路徑。 現(xiàn)實(shí)中,我們軟鏈接的應(yīng)用有,例如電腦桌面的快捷模式等。 inode number 不相同 硬鏈接 命令: ln 源文件目標(biāo)文件

    2024年02月11日
    瀏覽(26)
  • Linux之靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    Linux之靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    目錄 一、前言 二、對(duì)于庫(kù)的理解 三、靜態(tài)庫(kù) 四、動(dòng)態(tài)庫(kù) 五、動(dòng)靜態(tài)庫(kù)的加載 在之前,我們講了靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù),詳情請(qǐng)?zhí)D(zhuǎn):靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù) 下面我們將從工程師的角度,去了解靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的形成過(guò)程,以及實(shí)現(xiàn)它們的制作。并且了解如何將自己的庫(kù)交給別人,讓別

    2024年01月20日
    瀏覽(20)
  • 動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的使用

    動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的使用

    庫(kù)是一種可執(zhí)行代碼的二進(jìn)制形式,可以被操作系統(tǒng)載入內(nèi)存執(zhí)行。就是將源代碼轉(zhuǎn)化為二進(jìn)制格式的源代碼,相當(dāng)于進(jìn)行了加密,別人可以使用庫(kù),但是看不到庫(kù)中的內(nèi)容。 常見(jiàn)的庫(kù)類型 共享庫(kù) 靜態(tài)庫(kù) 動(dòng)態(tài)庫(kù) win32平臺(tái)下,靜態(tài)庫(kù)通常后綴為.lib,動(dòng)態(tài)庫(kù)為.dll 。 linux平臺(tái)下

    2024年02月03日
    瀏覽(14)
  • [靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)][VS2022]

    [靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)][VS2022]

    我們寫代碼,可以分模塊去寫,最后可以協(xié)作,能整合起來(lái); 可以吧代碼的實(shí)現(xiàn)和聲明分離。 比如:我的這篇博客C語(yǔ)言猜拳小游戲就用到了模塊化編程 什么是庫(kù): 庫(kù)是寫好的現(xiàn)有的,成熟的,可以復(fù)用的代碼?,F(xiàn)實(shí)中每個(gè)程序都要依賴很多基礎(chǔ)的底層庫(kù)本質(zhì)上來(lái)說(shuō)庫(kù)是一

    2024年02月15日
    瀏覽(16)
  • 關(guān)于靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的操作

    目錄 靜態(tài)庫(kù) 動(dòng)態(tài)庫(kù) 1.增加.o文件: 2.刪除.o文件: 查看靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)中的函數(shù)名 1.查看靜態(tài)庫(kù)中的函數(shù)名(以libexample.a為例): 2. 查看動(dòng)態(tài)庫(kù)中的函數(shù)名(以libexample.so為例): 查看動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)是32位,還是64位 1.? 如果是動(dòng)態(tài)庫(kù),可以使用: file *.so ? 2. 如果是靜態(tài)庫(kù),可

    2024年02月07日
    瀏覽(17)
  • 靜態(tài)鏈接庫(kù)和動(dòng)態(tài)鏈接庫(kù)的區(qū)別

    在編譯時(shí)將庫(kù)的代碼( .lib文件 )和應(yīng)用程序的代碼合并在一起,生成一個(gè)單獨(dú)的可執(zhí)行文件。 發(fā)布時(shí)非常方便,直接一個(gè).exe文件即可 庫(kù)的代碼在編譯時(shí)和鏈接時(shí)與應(yīng)用程序分開(kāi)。應(yīng)用程序包含對(duì)庫(kù)的引用( .lib文件 ,在這里被稱為導(dǎo)入庫(kù)),但不包含庫(kù)的實(shí)際代碼。 在 運(yùn)行

    2024年02月11日
    瀏覽(16)
  • Linux下動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)編譯實(shí)踐

    之前寫過(guò)JNI的文章,在JNI實(shí)踐過(guò)程中,也涉及到對(duì)動(dòng)態(tài)庫(kù)/靜態(tài)庫(kù)的一些編譯實(shí)踐,這里統(tǒng)一記錄一下。 注意 :-fPIC編譯選項(xiàng)可使GCC生成位置無(wú)關(guān)代碼,簡(jiǎn)單來(lái)說(shuō)生成的代碼中的函數(shù)與全局變量均為相對(duì)地址,通過(guò)GOT (Global offset table)來(lái)確定其位置,這種方式引入了一層額外的

    2024年01月17日
    瀏覽(20)
  • linux下g++鏈接動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)

    頭文件的作用: include的作用就是復(fù)制內(nèi)容到當(dāng)前文件 井號(hào)開(kāi)頭的就是預(yù)處理指令,由預(yù)處理器處理,預(yù)處理階段不關(guān)心代碼,只處理預(yù)處理指令。 頭文件主要 一是為了解決代碼都寫在一個(gè)文件太大了,二是把變量,結(jié)構(gòu)體,函數(shù)聲明這些固定的放在一起 函數(shù)只要聲明了,

    2024年02月09日
    瀏覽(21)
  • 如何在linux下制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    如何在linux下制作靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

    靜態(tài)庫(kù)顧名思義是靜態(tài)的,即程序編譯鏈接時(shí),會(huì)把靜態(tài)庫(kù)的代碼鏈接到可執(zhí)行文件中。運(yùn)行時(shí)不需要靜態(tài)庫(kù)(將靜態(tài)庫(kù)刪了也能運(yùn)行)。 相當(dāng)于靜態(tài)庫(kù)的代碼復(fù)制到了可執(zhí)行文件中。 分別有如下add.c add.h sub.c sub.h四個(gè)文件格式。 首先把.c文件都編譯成.o文件。使用下面命令

    2024年01月24日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包