1. 程式人生 > >linux下編譯C++程式

linux下編譯C++程式

一、GCC(GNU Compiler Collection)是Linux下最主要的編譯工具,GCC不僅功能非常強大,結構也異常靈活。它可以通過不同的前端模組來支援各種語言,如Java、Fortran、Pascal、Modula-3和Ada

         g++是GCC中的一個工具,專門來編譯C++語言的。

         GCC的引數有:( 也是分步實現)

                                  -E  讓GCC在預處理結束後停止編譯  g++ -E hello.cpp  -o  hello.i

                                   -c  將hello.i編譯成目的碼 g++  -c  hello.i  -o  hello.o

                                   將目標檔案連線成可執行檔案   g++ hell.o   -o   hello

           可以一步實現   g++  hello.cpp  -o  hello

 

二、假如有兩個以上原始檔應該一下編譯。

         一步就實現      g++   foo1.cpp   foo2.cpp   -o   foo

        也可以分步實現   g++   -c   foo1.cpp  -o   foo1.o

                                       g++   -c    foo2.cpp  -o   foo2.o

                                       g++   foo1.o  foo2.o    -o    foo

三、GCC一些常用選項

         1、產生警告資訊的選項大多數以-W開頭  其中有-Wall

              g++  -Wall  hello.cpp   -o   hello

         2、將所有的警告當成錯誤的選項-Werror

               g++ -Werror  hello.cpp  -o  hello

          3、尋找標頭檔案選項 -I    (linux預設路徑:標頭檔案在/usr/include/下),不在這個路徑下就要用-I指定。

              gcc  foo.cpp  -I/home/include   -o  foo

          4、 庫依賴選項     -L      (linux預設路徑:庫檔案在/usr/lib/下),不在這個路徑下就要用-L指定。

                g++  foo.cpp  -L/home/lib  -lfoo  -o   foo

               庫就是將原始檔編譯之後生成的目標檔案的集合。

               庫命名以lib開頭。

                庫有靜態庫(通常以.a結尾)和動態庫(通常以.so結尾)

                預設情況下,g++以動態庫形式連線。如果要靜態庫連線則要用-static指定(g++ foo.cpp  -L/home/lib  -static  -lfoo  -o  foo)

          5、優化選項  -On  (n取0到3之間)

 

四、介紹一些GNU 二進位制鏈工具

          1、ar命令(也稱為工具)   可以用來編譯成靜態庫

              ar  [-] {操作選項} {任選項} [成員名] [count] archive files….

              ar r v  libtest.a  hello.o  hello1.o  生成一個庫名為test,該庫中存放了hello.o和hello1.o這兩個模組。

               操作項:d (刪除)、  m(移動)、p(標準輸出)、q(快速追加)、r(在庫中插入模組)、t(顯示庫的模組清單)、x(從庫中提取一個成員)。

              任選項:a(成員後面新增一個新檔案)、b(成員前面新增一個新檔案)、c(建立一個庫)、f(截短指定名字)、v(顯示執行操作選項的附加資訊)。

          2、編譯成動態庫

               分步完成: gcc  -fPIC  -c  func.cpp  -o  func.o

                                     gcc -shared  -o  libfunc.so  func.o

               一步就完成:gcc -fPIC  -shared -o libfunc.so  func.cpp