日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c++构建工具之make使用小结

發布時間:2025/3/21 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++构建工具之make使用小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.動態庫靜態庫的生成

編譯生成靜態庫步驟:

第一步,生成目標文件。

  gcc -c test.c

第二步,把目標文件歸檔。

  ar r libtest.a test.o

  file libtest.a

編譯生成動態庫步驟:

???? gcc demo.c -fPIC -shared -o libtest.so

由以上命令生成動態庫libtest.so,為了不需要動態加載動態庫,在命令時需以lib開頭以.so為后綴。

–fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。

–shared:指明編譯成動態庫。


2.動態庫靜態庫的鏈接

編譯鏈接靜態庫

? gcc demo.c -ltest -L. -static -o demo

編譯鏈接動態庫

? gcc test.c –L . –ltest –o test

??????? -L:指明動態庫所在的目錄

??????? -l:指明動態庫的名稱,該名稱是處在頭lib和后綴.so中的名稱,如上動態庫libtest.so的l參數為-l test。

-ltest -L./lib 指定鏈接庫路徑

-wl,-rpath /home/Tim/demo/lib 指定搜索鏈接庫路徑

-wl,-Bstatic 后面的-l使用靜態庫鏈接

-wl,-Bdynamic 后面的-l使用動態庫連接

顯式加載與隱式加載

顯式加載通過編譯是鏈接符號表,運行時由系統搜索加載動態庫

隱式加載通過程序運行時調用下面幾個系統調用手動加載動態庫

dlopen 用于庫的打開
dlerror 用于錯誤檢測
dlsym 用于獲取庫中函數指針
dlclose 關閉動態庫,手動加載動態庫


3.動態庫靜態庫的加載

ldd test 查看執行程序的動態庫依賴

nm libtest.so 查看動態庫的符號

strings libtest.so 查看動態庫中字符串

strip libtest.so 脫去動態庫中符號信息

sudo lsof -p pid 查看運行進程的動態庫依賴

env 查看當前shell用戶環境變量

sudo env 查看切換sudo環境變量

export ld_library_path 配置動態庫路徑

pkg-config 配置搜索動態庫路徑命令

vi /etc/profile 配置環境變量到系統配置文件

source /etc/profile 使系統配置文件立即生效

vi ld.so.conf 查看系統動態庫共享目錄配置

sudo ldconfig 使系統動態庫共享目錄生效

sudo visudo 修改執行sudo切換時保留當前用戶shell環境

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使用小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。