剖析使用Linux動態庫應注意的問題
你對操作系統了解么?現在很多人應該了解微軟,其實現在Linux也越來越受到廣大程序員的喜歡。這里為你詳細介紹應注意的使用Linux動態庫應注意的問題,為你在學習的使用Linux動態庫應注意的問題起一定的作用。
1、無論是動態庫的顯式調用還是隱式調用,都需要用
ldconfig工具將動態庫的路徑加到系統庫列表中,否則運行時會出錯。
2、可以用ldd命令檢查程序都使用到哪些共享庫
ldd命令行用法如下:
ldd [--version] [-v|--verbose] [-d|--data-relocs] [-r|--function-relocs] [--help] FILE...
各選項說明如下:
(1) --version : 此選項用于打印出ldd的版本號.
(2) -v 或 --verbose : 此選項指示ldd輸出關于所依賴的動態鏈接庫的盡可能詳細的信息.
(3) -d 或 --data-relocs : 此選項執行重定位,并且顯示不存在的函數.
(4) -r 或 --function-relocs : 此選項執行數據對象與函數的重定位,同時報告不存在的對象.
(5) --help : 此選項用于打印出ldd的幫助信息.
我們一般用-v選項.
現在看幾個實例
⑴用靜態庫連接時的結果
- #ldd main
- libc.so.6 => /lib/tls/libc.so.6 (0xb74ad000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見使用靜態庫時,由于庫已經被編譯成程序的一部分,因此ldd的輸出中就只有用到的
系統庫。
⑵用動態庫隱式連接時的結果
- libtest.so => /root/exercise/libtest.so (0xb75e2000)
- libc.so.6 => /lib/tls/libc.so.6 (0xb74ab000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見隱式使用動態庫時,所有用到的動態庫(包括系統和用戶的)都會被顯示出來。
⑶動態庫顯式連接時的結果
- ldd main
- libdl.so.2 => /lib/libdl.so.2 (0xb75e1000)
- libc.so.6 => /lib/tls/libc.so.6 (0xb74aa000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0xb75eb000)
可見顯式使用動態庫時,程序中不再保存運行時打開動態庫的信息,只保留用到的系統庫的信息.
這個與使用靜態庫時的輸出是類似的.以上就是使用Linux動態庫應注意的問題。