導航:首頁 > 操作系統 > linux動態庫版本

linux動態庫版本

發布時間:2024-05-24 14:27:27

A. 如何查看linux動態鏈接庫文件的版本等其他信息

ldd <可執行文件名> 查看可執行文件鏈接了哪些
系統動態鏈接庫
nm <可執行文件名>
查看可執行文件裡面有哪些符號
strip <可執行文件名>
去除符號表可以給可執行文件瘦身
如果我們想從可執行程序裡面提取出來一點什麼文本信息的話,還可以用strings命令
strings
<可執行文件名>

Linux操作系統上面的動態共享庫大致分為三類:

1、操作系統級別的共享庫和基礎的系統工具庫

比方說libc.so, libz.so,
libpthread.so等等,這些系統庫會被放在/lib和/usr/lib目錄下面,如果是64位操作系統,還會有/lib64和/usr
/lib64目錄。如果操作系統帶有圖形界面,那麼還會有/usr/X11R6/lib目錄,如果是64位操作系統,還有/usr/X11R6
/lib64目錄。此外還可能有其他特定Linux版本的系統庫目錄。

這些系統庫文件的完整和版本的正確,確保了Linux上面各種程序能夠正常的運行。

2、應用程序級別的系統共享庫

並非操作系統自帶,但是可能被很多應用程序所共享的庫,一般會被放在/usr/local/lib和/usr/local/lib64這兩個目錄下面。很多你自行編譯安裝的程序都會在編譯的時候自動把/usr/local/lib加入gcc的-L參數,而在運行的時候自動到/usr/local
/lib下面去尋找共享庫。

以上兩類的動態共享庫,應用程序會自動尋找到他們,並不需要你額外的設置和擔心。這是為什麼呢?因為以上這些目錄默認就被加入到動態鏈接程序的搜索路徑裡面了。Linux的系統共享庫搜索路徑定義在/etc/ld.so.conf這個配置文件裡面。這個文件的內容格式大致如下:

/usr/X11R6/lib64
/usr/X11R6/lib
/usr/local/lib
/lib64
/lib
/usr/lib64
/usr/lib
/usr/local/lib64
/usr/local/ImageMagick/lib

假設我們自己編譯安裝的ImageMagick圖形庫在/usr/local/ImageMagick目錄下面,並且希望其他應用程序都可以使用
ImageMagick的動態共享庫,那麼我們只需要把/usr/local/ImageMagick/lib目錄加入/etc/ld.so.conf文件裡面,然後執行:ldconfig
命令即可。

ldcofig將搜索以上所有的目錄,為共享庫建立一個緩存文件/etc/ld.so.cache。為了確認ldconfig已經搜索到ImageMagick的庫,我們可以用上面介紹的strings命令從ld.so.cache裡面抽取文本信息來檢查一下:

strings
/etc/ld.so.cache | grep ImageMagick

輸出結果為:

/usr/local/ImageMagick/lib/libWand.so.10
/usr/local/ImageMagick/lib/libWand.so
/usr/local/ImageMagick/lib/libMagick.so.10
/usr/local/ImageMagick/lib/libMagick.so
/usr/local/ImageMagick/lib/libMagick++.so.10
/usr/local/ImageMagick/lib/libMagick++.so
已經成功了!

3、應用程序獨享的動態共享庫

有很多共享庫只被特定的應用程序使用,那麼就沒有必要加入系統庫路徑,以免應用程序的共享庫之間發生版本沖突。因此Linux還可以通過設置環境變數LD_LIBRARY_PATH來臨時指定應用程序的共享庫搜索路徑,就像我們上面舉的那個例子一樣,我們可以在應用程序的啟動腳本裡面預先設置
LD_LIBRARY_PATH,指定本應用程序附加的共享庫搜索路徑,從而讓應用程序找到它。

B. Linux下怎麼獲得c庫版本怎麼動態的獲得c編譯器版本

外部調用 gcc -v 抓取最後一行吧
libc庫可以直接外部運行 /lib/libc.so.6,或者用 /usr/include/gnu/libc-version.h 里的兩個函數找

C. Linux下的靜態庫和動態庫

靜態庫

可以把它想像成是一些代碼的集合,在可執行程序運行前就已經加到了代碼中,成為了執行程序的一部分,一般是以.a為後綴的文件名,Windows下後綴為.lib。靜態庫的命名也分為三部分,1、前綴:lib,2、庫的名稱:隨意,如lisi,3、後綴:.a。

靜態庫優缺點

上面簡單介紹了靜態庫,那它自然也會有優缺點,這里來介紹下它的優缺點。

優點:1、在最後,函數庫是被打包到應用程序中的,實現函數本地化、定址方便、高效。2、程序在運行的時候,與函數庫沒有關系,移植性更強。

缺點:1、消耗資源較大,每個進程在使用靜態庫的時候,都要復制一份才可以,這也就造成了內存的消耗。2、在程序更新、部署、發布的時候,使用靜態庫相對麻煩,如果一個靜態庫更新了,那它的應用程序都需要重新編譯,再發送給用戶,有的時候可能只是一個小的改動,但對於用戶來說,會導致整個程序重新下載。

動態庫

在程序編譯時不會被連接到目標代碼中,在後期運行時才會載入,不同的應用程序如果調用相同的庫,內存中只有一份共享庫的拷貝,也就避免了空間的浪費問題。一般以.so作為文件後綴名,也分為三部分:1、前綴:lib,2、庫名稱:自定義,3、後綴:.so

動態庫優缺點

優點:1、節省內存2、部署、升級相對方便,只需要更換動態庫,再重新啟動服務即可。

缺點:1、載入速度比靜態庫慢2、移植性較差,需要把所有用到的動態庫進行移植。

D. linux下安裝了6.1.0版本的gcc,但cmake時用的還是舊版的gcc

這個應該是動態庫的問題吧,我之前遇到的問題就是這樣解決的:

strings /usr/lib64/libstdc++.so.6 | grep GLIBC\檢查動態庫

mv /usr/lib64/libstdc++.so.6 /tmp

ln -s /usr/local/lib64/libstdc++.so.6 /usr/lib64/libstdc++.so.6

[root@ops-test01 gcc-6.1.0]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBC_2.2.5

GLIBC_2.3

GLIBC_2.4

GLIBC_2.3.2

GLIBCXX_FORCE_NEW

GLIBCXX_DEBUG_MESSAGE_LENGTH

果然是老的鏈接 ,GLIBCXX_3.4.13往後的都沒有了

root@ops-test01 gcc-6.1.0]# find / -name libstdc++.so.6

/usr/lib64/libstdc++.so.6

/usr/local/lib64/libstdc++.so.6

/usr/local/src/gcc-6.1.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

/usr/local/src/gcc-6.1.0/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

/usr/local/src/gcc-6.1.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6

/root/vmware-tools-distrib/caf/usr/lib/vmware-caf/pme/lib/libstdc++.so.6

/root/vmware-tools-distrib/lib/lib64/libstdc++.so.6

/root/vmware-tools-distrib/lib/lib64/libstdc++.so.6/libstdc++.so.6

/root/vmware-tools-distrib/lib/lib32/libstdc++.so.6

/root/vmware-tools-distrib/lib/lib32/libstdc++.so.6/libstdc++.so.6

查找鏈接客戶的內容,然後確定/usr/local/lib64/libstdc++.so.6是新的鏈接庫,

[root@ops-test01 gcc-6.1.0]# mv /usr/lib64/libstdc++.so.6 /tmp

[root@ops-test01 lib64]# cd /usr/lib64

[root@ops-test01 lib64]# ln -s /usr/local/lib64/libstdc++.so.6 libstdc++.so.6

[root@ops-test01 lib64]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC

GLIBCXX_3.4

GLIBCXX_3.4.1

GLIBCXX_3.4.2

GLIBCXX_3.4.3

GLIBCXX_3.4.4

GLIBCXX_3.4.5

GLIBCXX_3.4.6

GLIBCXX_3.4.7

GLIBCXX_3.4.8

GLIBCXX_3.4.9

GLIBCXX_3.4.10

GLIBCXX_3.4.11

GLIBCXX_3.4.12

GLIBCXX_3.4.13

GLIBCXX_3.4.14

GLIBCXX_3.4.15

GLIBCXX_3.4.16

GLIBCXX_3.4.17

GLIBCXX_3.4.18

GLIBCXX_3.4.19

GLIBCXX_3.4.20

GLIBCXX_3.4.21

GLIBCXX_3.4.22

GLIBC_2.3

GLIBC_2.2.5

GLIBC_2.3.2

GLIBCXX_FORCE_NEW

GLIBCXX_DEBUG_MESSAGE_LENGTH

ok,現在在編譯試試!!更多 Linux知識建議參考《Linux就該這樣學》,加油!!!

閱讀全文

與linux動態庫版本相關的資料

熱點內容
純小數運演算法則 瀏覽:378
php什麼是事務 瀏覽:855
怎麼添加網名文件夾 瀏覽:767
啊哈演算法語言 瀏覽:675
馬來西亞加密貨幣政策 瀏覽:231
交通銀行app鎖定怎麼解鎖 瀏覽:44
php登錄驗證session 瀏覽:728
粵政易文件放在手機哪個文件夾 瀏覽:105
列印機和傳真命令 瀏覽:548
php添加購物車 瀏覽:5
安卓怎麼下載植物大戰僵屍1無盡版 瀏覽:267
程序員上班下班難嗎 瀏覽:299
夢的pdf微盤 瀏覽:186
材料結構分析pdf 瀏覽:795
程序員預研的項目 瀏覽:346
新華保險伺服器登錄不上怎麼回事 瀏覽:397
氣溫高時汽車空調壓縮機振動 瀏覽:563
分配器python 瀏覽:228
outlook伺服器怎麼查詢 瀏覽:400
python預測疫情代碼 瀏覽:982