日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

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

發(fā)布時(shí)間:2025/3/21 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++构建工具之make使用小结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的生成

編譯生成靜態(tài)庫(kù)步驟:

第一步,生成目標(biāo)文件。

  gcc -c test.c

第二步,把目標(biāo)文件歸檔。

  ar r libtest.a test.o

  file libtest.a

編譯生成動(dòng)態(tài)庫(kù)步驟:

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

由以上命令生成動(dòng)態(tài)庫(kù)libtest.so,為了不需要?jiǎng)討B(tài)加載動(dòng)態(tài)庫(kù),在命令時(shí)需以lib開(kāi)頭以.so為后綴。

–fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的所以動(dòng)態(tài)載入時(shí)是通過(guò)代碼拷貝的方式來(lái)滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。

–shared:指明編譯成動(dòng)態(tài)庫(kù)。


2.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的鏈接

編譯鏈接靜態(tài)庫(kù)

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

編譯鏈接動(dòng)態(tài)庫(kù)

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

??????? -L:指明動(dòng)態(tài)庫(kù)所在的目錄

??????? -l:指明動(dòng)態(tài)庫(kù)的名稱,該名稱是處在頭lib和后綴.so中的名稱,如上動(dòng)態(tài)庫(kù)libtest.so的l參數(shù)為-l test。

-ltest -L./lib 指定鏈接庫(kù)路徑

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

-wl,-Bstatic 后面的-l使用靜態(tài)庫(kù)鏈接

-wl,-Bdynamic 后面的-l使用動(dòng)態(tài)庫(kù)連接

顯式加載與隱式加載

顯式加載通過(guò)編譯是鏈接符號(hào)表,運(yùn)行時(shí)由系統(tǒng)搜索加載動(dòng)態(tài)庫(kù)

隱式加載通過(guò)程序運(yùn)行時(shí)調(diào)用下面幾個(gè)系統(tǒng)調(diào)用手動(dòng)加載動(dòng)態(tài)庫(kù)

dlopen 用于庫(kù)的打開(kāi)
dlerror 用于錯(cuò)誤檢測(cè)
dlsym 用于獲取庫(kù)中函數(shù)指針
dlclose 關(guān)閉動(dòng)態(tài)庫(kù),手動(dòng)加載動(dòng)態(tài)庫(kù)


3.動(dòng)態(tài)庫(kù)靜態(tài)庫(kù)的加載

ldd test 查看執(zhí)行程序的動(dòng)態(tài)庫(kù)依賴

nm libtest.so 查看動(dòng)態(tài)庫(kù)的符號(hào)

strings libtest.so 查看動(dòng)態(tài)庫(kù)中字符串

strip libtest.so 脫去動(dòng)態(tài)庫(kù)中符號(hào)信息

sudo lsof -p pid 查看運(yùn)行進(jìn)程的動(dòng)態(tài)庫(kù)依賴

env 查看當(dāng)前shell用戶環(huán)境變量

sudo env 查看切換sudo環(huán)境變量

export ld_library_path 配置動(dòng)態(tài)庫(kù)路徑

pkg-config 配置搜索動(dòng)態(tài)庫(kù)路徑命令

vi /etc/profile 配置環(huán)境變量到系統(tǒng)配置文件

source /etc/profile 使系統(tǒng)配置文件立即生效

vi ld.so.conf 查看系統(tǒng)動(dòng)態(tài)庫(kù)共享目錄配置

sudo ldconfig 使系統(tǒng)動(dòng)態(tài)庫(kù)共享目錄生效

sudo visudo 修改執(zhí)行sudo切換時(shí)保留當(dāng)前用戶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

總結(jié)

以上是生活随笔為你收集整理的c++构建工具之make使用小结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。