c++构建工具之make使用小结
1.動態(tài)庫靜態(tài)庫的生成
編譯生成靜態(tài)庫步驟:
第一步,生成目標文件。
gcc -c test.c
第二步,把目標文件歸檔。
ar r libtest.a test.o
file libtest.a
編譯生成動態(tài)庫步驟:
???? gcc demo.c -fPIC -shared -o libtest.so
由以上命令生成動態(tài)庫libtest.so,為了不需要動態(tài)加載動態(tài)庫,在命令時需以lib開頭以.so為后綴。
–fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態(tài)載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。
–shared:指明編譯成動態(tài)庫。
2.動態(tài)庫靜態(tài)庫的鏈接
編譯鏈接靜態(tài)庫
? gcc demo.c -ltest -L. -static -o demo
編譯鏈接動態(tài)庫
? gcc test.c –L . –ltest –o test
??????? -L:指明動態(tài)庫所在的目錄
??????? -l:指明動態(tài)庫的名稱,該名稱是處在頭lib和后綴.so中的名稱,如上動態(tài)庫libtest.so的l參數(shù)為-l test。
-ltest -L./lib 指定鏈接庫路徑
-wl,-rpath /home/Tim/demo/lib 指定搜索鏈接庫路徑
-wl,-Bstatic 后面的-l使用靜態(tài)庫鏈接
-wl,-Bdynamic 后面的-l使用動態(tài)庫連接
顯式加載與隱式加載
顯式加載通過編譯是鏈接符號表,運行時由系統(tǒng)搜索加載動態(tài)庫
隱式加載通過程序運行時調用下面幾個系統(tǒng)調用手動加載動態(tài)庫
dlopen 用于庫的打開
dlerror 用于錯誤檢測
dlsym 用于獲取庫中函數(shù)指針
dlclose 關閉動態(tài)庫,手動加載動態(tài)庫
3.動態(tài)庫靜態(tài)庫的加載
ldd test 查看執(zhí)行程序的動態(tài)庫依賴
nm libtest.so 查看動態(tài)庫的符號
strings libtest.so 查看動態(tài)庫中字符串
strip libtest.so 脫去動態(tài)庫中符號信息
sudo lsof -p pid 查看運行進程的動態(tài)庫依賴
env 查看當前shell用戶環(huán)境變量
sudo env 查看切換sudo環(huán)境變量
export ld_library_path 配置動態(tài)庫路徑
pkg-config 配置搜索動態(tài)庫路徑命令
vi /etc/profile 配置環(huán)境變量到系統(tǒng)配置文件
source /etc/profile 使系統(tǒng)配置文件立即生效
vi ld.so.conf 查看系統(tǒng)動態(tài)庫共享目錄配置
sudo ldconfig 使系統(tǒng)動態(tài)庫共享目錄生效
sudo visudo 修改執(zhí)行sudo切換時保留當前用戶shell環(huán)境
sudo cat /etc/sudoers
Defaults??????? env_keep+="ld_library_path"
4.參考資料
http://man.linuxde.net/ldconfig
http://blog.chinaunix.net/uid-24641004-id-5028821.html
https://www.cnblogs.com/zhangsir6/articles/2956798.html
總結
以上是生活随笔為你收集整理的c++构建工具之make使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++构建工具之xmake使用实例
- 下一篇: c++构建工具之cmake使用小结