gcc 編譯時中 L l Wall的含義

2021-06-07 19:59:16 字數 692 閱讀 6472

-wall 開啟gcc的所有警告

-l 新增鏈結庫的搜尋路徑

-l 就是用來指定程式要鏈結的庫

-l引數就是用來指定程式要鏈結的庫,-l引數緊接著就是庫名,那麼庫名跟真正的庫檔名有什麼關係呢?就拿數學庫來說,他的庫名是m,他的庫檔名是libm.so,很容易看出,把庫檔名的頭lib和尾.so去掉就是庫名了。

好了現在我們知道怎麼得到庫名,當我們自已要用到乙個第三方提供的庫名字libtest.so,那麼我們只要把libtest.so拷貝到/usr/lib裡,編譯時加上-ltest引數,我們就能用上libtest.so庫了(當然要用libtest.so庫里的函式,我們還需要與libtest.so配套的標頭檔案)

放在/lib和/usr/lib和/usr/local/lib裡的庫直接用-l引數就能鏈結了,但如果庫檔案沒放在這三個目錄裡,而是放在其他目錄裡,這時我們只用-l引數的話,鏈結還是會出錯,出錯資訊大概是:「/usr/bin/ld: cannot find -l***」,也就是鏈結程式ld在那3個目錄裡找不到lib***.so,這時另外乙個引數-l就派上用場了,比如常用的x11的庫,它在/usr/x11r6/lib目錄下,我們編譯時就要用-l/usr/x11r6/lib -lx11引數,-l引數跟著的是庫檔案所在的目錄名。再比如我們把libtest.so放在/aaa/bbb/ccc目錄下,那鏈結引數就是-l/aaa/bbb/ccc -ltest

gcc編譯器引數:

樹莓派使用gcc編譯含mysql h標頭檔案的C語言

雖然ubuntu和樹莓派都是基於linux系統開發的,但是他們的資料庫有所不同。在樹莓派上,我只能夠安裝mariadb server 10.0,而不能安裝mysql server。在執行某些c語言對資料庫操作的程式造成了困擾。ubuntu的 gcc i usr include mysql c l u...

GCC的編譯過程

用編譯器gcc生成可執行檔案,看似簡單的一步完成,其實包含了四個過程。分別是 預處理 pre processing 這一步需要分析各種預處理命令,如 define include if,ifndef,ifdef,endif,undef等。對於巨集而言,gcc會將巨集定義的內容直接替換,include...

gcc的編譯過程

乙個.c檔案變成乙個可執行檔案需要四個步驟,如下圖所示 選項功能 v檢視gcc編譯器的版本,顯示gcc執行時的詳細過程 o 指定輸出檔名為file,這個名稱不能跟源檔名同名 e只預處理,不會編譯 彙編 鏈結 s只編譯,不會彙編和鏈結 c編譯和彙編,不會鏈結 1 通過 gcc e o i c 只預處理...