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

Linux下動(dòng)態(tài)庫和靜態(tài)庫編譯實(shí)踐

這篇具有很好參考價(jià)值的文章主要介紹了Linux下動(dòng)態(tài)庫和靜態(tài)庫編譯實(shí)踐。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

背景

之前寫過JNI的文章,在JNI實(shí)踐過程中,也涉及到對動(dòng)態(tài)庫/靜態(tài)庫的一些編譯實(shí)踐,這里統(tǒng)一記錄一下。

動(dòng)態(tài)庫(.so文件)

  • 注意:-fPIC編譯選項(xiàng)可使GCC生成位置無關(guān)代碼,簡單來說生成的代碼中的函數(shù)與全局變量均為相對地址,通過GOT (Global offset table)來確定其位置,這種方式引入了一層額外的間接性,會(huì)有一定的性能損失。
gcc -c -W -Wall -Werror -fpic foo.c
gcc -shared -o libfoo.so foo.o
gcc -L/home/username/foo -W -Wall -o test main.c -lfoo
  • 在linux配置動(dòng)態(tài)庫使用位置,有如下兩種方式:
    1. 使用環(huán)境變量來可配置的使用動(dòng)態(tài)庫
export LD_LIBRARY_PATH=/home/username/foo:$LD_LIBRARY_PATH
#只有導(dǎo)出這個(gè)環(huán)境變量才能被子進(jìn)程繼承
./test
  1. 使用rpath指定動(dòng)態(tài)庫的絕對路徑
unset LD_LIBRARY_PATH
gcc -L/home/username/foo -Wl,-rpath=/home/username/foo -Wall -o test main.c -lfoo
./test
  • 將動(dòng)態(tài)庫就安裝到系統(tǒng)中,這樣編譯時(shí)就可以不加-L
cp /home/username/foo/libfoo.so /usr/lib
#/usr/lib是32位 /usr/lib64是64位
chmod 0755 /usr/lib/libfoo.so
ldconfig
  • 查看動(dòng)態(tài)庫
nm -D libmyfunc.so

靜態(tài)庫(.a文件)

  • 靜態(tài)庫實(shí)際上是一組目標(biāo)文件(object files)的打包,可以通過工具(例如ar)將它們組合成一個(gè)歸檔文件(archive file)。
gcc -c myfunc.c -o myfunc.o
ar rcs libmyfunc.a myfunc.o
#查看這個(gè)靜態(tài)庫里面都打包了什么obj文件
ar tf myfunc.a
#查看靜態(tài)庫中都有哪些符號
nm myfunc.a


關(guān)于GLIBC

我們知道Linux Kernel是使用GNC C編譯器編譯的,那么GLIBC是我們肯定要用到的庫,Kernel和GLIBC兩者的版本關(guān)系在link時(shí)確定,所以我們要保證不要自行升級GLIBC,否則會(huì)導(dǎo)致kernel無法啟動(dòng)。文章來源地址http://www.zghlxwxcb.cn/news/detail-796620.html

  • 查看動(dòng)態(tài)庫關(guān)聯(lián)的GLIBC版本:
ldd -v myexample.so
  • 查看動(dòng)態(tài)庫中的所有符號
nm -D myexample.so

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

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

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

相關(guān)文章

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

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

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

    2024年01月20日
    瀏覽(20)
  • 如何在linux下制作靜態(tài)庫和動(dòng)態(tài)庫

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

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

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

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

    介紹: 庫是一個(gè)二進(jìn)制文件,包含的代碼可被程序調(diào)用 標(biāo)準(zhǔn)C庫、數(shù)學(xué)庫、線程庫… 庫有源碼,可下載后編譯;也可以直接安裝二進(jìn)制包 位置一般放在:/lib /usr/lib 庫的知識(shí) 庫是事先編譯好的,可以復(fù)用的代碼 在os上運(yùn)行的程序基本上都要使用庫,使用庫可以提高開發(fā)效率

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

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

    2024年02月09日
    瀏覽(21)
  • Linux操作命令&靜態(tài)庫和動(dòng)態(tài)庫區(qū)別&大小端&孤兒僵尸進(jìn)程

    cd:切換當(dāng)前目錄 ls:查看當(dāng)前文件與目錄 grep:通常與管道符命令一起使用,用于對一些命令的輸出進(jìn)行篩選和加工 cp:復(fù)制文件或文件夾 mv:移動(dòng)文件或文件夾 rm:刪除文件或文件夾 ps:查看進(jìn)程情況 kill:向進(jìn)程發(fā)送信號 tar:對文件進(jìn)行打包 cat:查看文件內(nèi)容 top:查看

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

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

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

    2024年02月15日
    瀏覽(33)
  • 【探索Linux】—— 強(qiáng)大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動(dòng)態(tài)庫和靜態(tài)庫)

    【探索Linux】—— 強(qiáng)大的命令行工具 P.13(文件系統(tǒng) | 軟硬鏈接 | 動(dòng)態(tài)庫和靜態(tài)庫)

    在計(jì)算機(jī)科學(xué)領(lǐng)域中,Linux 系統(tǒng)一直以來都是備受推崇的操作系統(tǒng)之一。其中,文件系統(tǒng)、軟硬鏈接、動(dòng)態(tài)庫和靜態(tài)庫是 Linux 系統(tǒng)中非常重要的概念,在實(shí)際應(yīng)用中扮演著不可或缺的角色。 在上一篇文章中,我們了解了 Linux 系統(tǒng)中文件描述符、重定向以及基礎(chǔ) IO 操作的相關(guān)

    2024年02月04日
    瀏覽(21)
  • aarch64-linux-gcc安裝編譯及生成so動(dòng)態(tài)庫和調(diào)用

    aarch64-linux-gcc安裝編譯及生成so動(dòng)態(tài)庫和調(diào)用

    官方二進(jìn)制下載 Ubuntu packages 提供了軟件包: gcc-arm-linux-gnueabihf (4:7.4.0-1ubuntu2.3 以及其他的) 。 建議直接從 linaro 的官網(wǎng)下載相應(yīng)版本的 gcc-linaro 交叉編譯工具,并直接選擇帶有二進(jìn)制的文件,即在官網(wǎng)入口處選擇 binaries 路徑,該文件夾下面包含各種版本的已經(jīng)編譯好的 aarch

    2024年02月13日
    瀏覽(28)
  • Linux—Web服務(wù)器(靜態(tài)、動(dòng)態(tài)網(wǎng)站的搭建)

    Linux—Web服務(wù)器(靜態(tài)、動(dòng)態(tài)網(wǎng)站的搭建)

    1.1www所用的協(xié)議 HTTP超文本傳輸協(xié)議,是互聯(lián)網(wǎng)上最廣泛的一種網(wǎng)絡(luò)協(xié)議,所有的www文件都必須遵守這個(gè)標(biāo)準(zhǔn) 它是建立在TCP上一種的無狀態(tài)連接,整個(gè)基本的工作流程是客戶端發(fā)送一個(gè)HTTP請求,說明客戶端想要訪問的資源和請求的動(dòng)作,服務(wù)端收到請求之后,服務(wù)端開始處理

    2024年02月06日
    瀏覽(26)
  • Linux gcc/g++編譯鏈接頭文件和庫(動(dòng)態(tài)庫.so 和 靜態(tài)庫.a)

    Linux gcc/g++編譯鏈接頭文件和庫(動(dòng)態(tài)庫.so 和 靜態(tài)庫.a)

    最近在學(xué)習(xí)log4cpp庫時(shí),使用g++去編譯,卻發(fā)現(xiàn)自己不會(huì)鏈接...,這哪能行,于是網(wǎng)上鉆研,終于解決,現(xiàn)在記錄下來分享給遇到同樣問題的人。 gcc和g++類似,這里就以g++為例! 剛好用到的log4cpp日志庫有頭文件和動(dòng)態(tài)庫.so和靜態(tài)庫.a,這里就以log4cpp庫為例。 在安裝好log4cpp庫

    2024年02月08日
    瀏覽(28)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包