gcc編譯鏈接庫

場景

今天編譯sqlite3時候,發現了sqlite編譯時有些庫不認識,很好奇就查詢了一下

-libz -libdl

結果

libz是壓縮庫,負責處理一些壓縮之類的事情,如果所編譯的程序有所使用,則可能牽涉到需要壓縮的內容。123

libdl歷史上,該庫中的函數提供動態鏈接功能,但現在這些函數在libc中了,不過爲了保持向後兼容性(回溯兼容性)這個庫保留了下來。新的應用開發不需要聲明改選項,主要是爲了向後兼容才使用的。45

大部分系統庫,都可以用以下指令查看具體的庫的全命,然後方便搜索:

ls /usr/lib/x86_64-linux-gnu/ | grep 'libz'

而關於系統動態庫的位置路徑6可以查看:

cat /etc/ld.so.conf

結果如下:

include /etc/ld.so.conf.d/*.conf

我在使用的主機中/etc/ld.so.conf.d/目錄如下:

fakeroot-x86_64-linux-gnu.conf  libc.conf                       vmware-tools-libraries.conf     x86_64-linux-gnu.conf           zz_i386-biarch-compat.conf  

其中libc.conf中的內容和$LD_LIBRARY_PATH對應。關於Linux目錄文件的含義,可以看看Linux目錄結構含義


  1. 簡單說說zlib.h,libz.a/libz.so庫和-lz ↩︎

  2. 如何安裝libz ↩︎

  3. 搜索Ubuntu中package包。在Search the contents of package那一欄中搜索對應的庫,如:libz.so ↩︎

  4. Oracle Man page中關於libdl庫的描述,該文檔中還包括一些其它的庫。 ↩︎

  5. libdl.so的基本使用libdl.so的基本使用 ↩︎

  6. /etc/ld.so.conf, /etc/ld.so.cache ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章