久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

gcc/g++ 靜態(tài)動態(tài)庫 混鏈接.

 wuxinit_ 2021-04-29

轉(zhuǎn)載自:http://blog.csdn.net/wangxvfeng101/article/details/15336955

我的環(huán)境: centos6 x64. gcc4.4.7

在使用gcc/g++ 編譯程序時我們希望指向一些庫是使用靜態(tài)的鏈接方式. 另外的一些是動態(tài)的方式.

我以boost 為例.

如果我們要使用靜態(tài)庫則是這樣的:

# g++ main.cpp -lpthread /usr/lib64/libboost_thread.a /usr/lib64/libboost_system.a

靜態(tài)庫直接寫路徑. 動態(tài)前面加-l  這樣也可以實現(xiàn).

但有沒有更好的辦法呢. 有.

先參考個帖子:http:///questions/3698321/g-linker-force-static-linking-if-static-library-exists

根據(jù)老外這個帖子 照貓畫狗

g++   main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread -Wl,-Bdynamic

這樣就可以了.

再來看一下老外的這個例子:

g++ main.cpp  -Wl,-Bstatic -lz -lfoo -Wl,-Bdynamic -lbar -Wl,--as-needed

Will link zlib and libfoo as static, and libbar as dynamic . --as-needed will drop any unused dynamic library.

但是這個過程中我用了將近1天時間才搞定的.

因為我剛開始是這樣寫的:

g++   main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread

這樣它就會出現(xiàn)這樣的錯誤提示:

/usr/bin/ld: cannot find -lgcc_s
collect2: ld returned 1 exit status

于是我就按照這個提示搞. 意思就是 libgcc_s.so 沒找到. 于是 我就折騰這個. 明明它在.可是就是提示找不到這個錯誤.

搞了大半天就要放棄了..

我最后想是不是 要在后面加  -Wl,-Bdynamic   其它的庫才能默認動態(tài)鏈接.

試了一下果然..

我在后面加了這個就成功了.

g++   main.cpp -lrt -Wl,-Bstatic -lboost_system -lboost_thread -Wl,-Bdynamic  -Wl,--as-needed

-Wl,--as-needed 這個選項是可選的是 這個選項的意思是去除沒有使用的動態(tài)庫

還有一個比較簡單的錯誤就是 :

thread.cpp:(.text+0x1a93): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1b08): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1b6f): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1bd6): undefined reference to `clock_gettime'
thread.cpp:(.text+0x1c3d): undefined reference to `clock_gettime'

一般動態(tài)鏈接時不會出現(xiàn)這個錯.  是靜態(tài)鏈接時才出這個錯.

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多