gcc編譯選項的迴圈重複查詢依賴庫等命令

2021-09-09 01:32:08 字數 1005 閱讀 6952

link時,若liba.a依賴libb.a,若這樣寫 -lb -la,則鏈結通不過,gcc有個選項:-xlinker ,可以讓gcc在鏈結時反覆查詢依賴庫,用法 :

gcc -shared -o libxx.so xx.o  -l.  -xlinker  "

-(" -lb -la "

-)" -xlinker

這樣,包含在 -xlinker  "-("      和       "-)" -xlinker  之間的庫之間的依賴關係就不用自己操心了,linker自己知道前向回去搜尋一次。

(注:   --start-group  與--end-group   與上面的 -xlinker功能差不多,不過不推薦)

linker還有乙個選項,主要用在當用靜態庫生成動態庫時,將靜態庫完整打包到動態庫里,不過會使動態庫占用空間變大,不推薦,示例:

gcc -shared -o libxx.so xx.o -l. -wl,--whole-archive some_static_lib.a yy.o -wl,--no-whole-archive

-wl,--whole-archive

-wl,--no-whole-archive

必須成對出現,不然出現 redefine錯誤,因為隱性的 -lc -ld -lm -lz 等都被多次完整打包,容易出現 redefine錯誤。

對於多個靜態庫,最好不要用ar將它們打包到乙個靜態庫,鏈結後的so庫有可能會存在 undefined symbol 的符號,在執行時候才會觸發錯誤(鏈結時不會出錯)。

多個靜態庫還是推薦單獨使用他們為好,即: -la -lb -lcc -ldd。 

不推薦將 liba.a libb.a libcc.a libdd.a 用ar打包成乙個庫來使用,不然執行有可能出錯的。

gcc的編譯選項總結

3 arm架構專有的編譯選項 參考文獻 本文用於記錄我在學習和工作中遇到的各種gcc選項,雖然這些選項可以在gnu的手冊上查到,不過這裡做個總結,可以避免每次都去查手冊,算是乙個備忘吧。本文的內容會不斷更新擴充。選項作用 o指定輸出檔名稱 e只進行預處理 s只進行預處理 編譯 c只預處理 編譯 彙編...

MyBatis重複查詢產生的快取問題

今天遇到乙個很坑的問題,業務場景為先查詢資料,然後新增資料,之後又再次查詢資料,發現查不到最新的資料。本來以為是事物影響的,查了好多關於事物的東西,後來排查到每次查到的位址都是同乙個位址,並且控制台中列印的日誌資訊中 fetched sqlsession org.apache.ibatis.sess...

Gcc編譯時的 w W Wall選項

今天在看乙個makefile時看到了gcc w wall 這句,不明其理,專門檢視了gcc的使用手冊。w的意思是關閉編譯時的警告,也就是編譯後不顯示任何warning,因為有時在編譯之後編譯器會顯示一些例如資料轉換之類的警告,這些警告是我們平時可以忽略的。wall選項意思是編譯後顯示所有警告。w選項...