轉(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 于是我就按照這個提示搞. 意思就是 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' 一般動態(tài)鏈接時不會出現(xiàn)這個錯. 是靜態(tài)鏈接時才出這個錯. |
|