linux gcc 命令

1,-c 編譯目標代碼


      gcc -o hello.o -c hello.c  //-o 只是指定生成目標文件名

      或

      gcc -c hello.c

      都生成hello.o文件,不可以執行。

      gcc -o hello hello.o

      用目標文件生成hello可執行文件。

      gcc -o hello hello.c

      用源文件直接生成hello可執行程序。


2, -fpic或-fPIC   產生位置無關的目標代碼,可用於構造共享函數庫。


  # gcc -fPIC -c message.c

  “PIC”命令行標記告訴 GCC 產生的代碼不要包含對函數和變量具體內存位置的引用,這是因爲現在還無法知道

使用該消息代碼的應用程序會將它連接到哪一段內存地址空間。這樣編譯輸出的文 件 message.o 可以被用於建立

共享函數庫。

  # gcc -shared -o libmessage.so message.o

  將上面的mian.c使用共享庫函數ligmessage.so編譯:

  # gcc -o goodbye -lmessage -L. message.o

 

3,gcc的常用連接選項有下列幾個:


  -Ldir   將dir目錄加到搜尋-l選項指定的函數庫文件的目錄列表中去,並優先於gcc缺省的搜索目錄。在有多個-L

選項的情況下,按命令行上-L選項的前後順序搜索。dir可使用相對路徑。如-L../lib等。

  -lname   在連接時使用函數庫libname.a,連接程序在-Ldir選項指定的目錄下和/lib,/usr/lib目錄下尋找該庫文件。在沒有使用-static選項時,如果發現共享函數庫libname.so,則使用libname.so進行動態連接。

  -static   禁止與共享函數庫連接。

  -shared   儘量與共享函數庫連接。


4,編譯選項順序


          $ gcc test.o -L. -lhello -o test

          注意: $gcc -L. -lhello test.o -o test 會出錯!。
         原因是: -l是鏈接器選項,必須要放到被編譯文件的後面。 所以上面的命令中-lhello一定要放到 test.o的後面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章