日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

linux下使用g++編譯cpp工程的方法

瀏覽:373日期:2024-04-16 13:22:10

C++編程中相關文件后綴

linux下使用g++編譯cpp工程的方法

1.單個源文件生成可執行程序

下面是一個保存在文件 helloworld.cpp 中一個簡單的 C++ 程序的代碼:

/* helloworld.cpp */#include <iostream>int main(int argc,char *argv[]){ std::cout << 'hello, world' << std::endl; return(0);}

程序使用定義在頭文件 iostream 中的 cout,向標準輸出寫入一個簡單的字符串。該代碼可用以下命令編譯為可執行文件:

$ g++ helloworld.cpp

編譯器 g++ 通過檢查命令行中指定的文件的后綴名可識別其為 C++ 源代碼文件。編譯器默認的動作:編譯源代碼文件生成對象文件(object file),鏈接對象文件和 libstdc++ 庫中的函數得到可執行程序。然后刪除對象文件。由于命令行中未指定可執行程序的文件名,編譯器采用默認的 a.out。程序可以這樣來運行:

$ ./a.outhello, world

更普遍的做法是通過 -o 選項指定可執行程序的文件名。下面的命令將產生名為 helloworld 的可執行文件:

$ g++ helloworld.cpp -o helloworld

在命令行中輸入程序名可使之運行:

$ ./helloworld hello, world

程序 g++ 是將 gcc 默認語言設為 C++ 的一個特殊的版本,鏈接時它自動使用 C++ 標準庫而不用 C 標準庫。通過遵循源碼的命名規范并指定對應庫的名字,用 gcc 來編譯鏈接 C++ 程序是可行的,如下例所示:

$ gcc helloworld.cpp -lstdc++ -o helloworld

選項 -l (ell) 通過添加前綴 lib 和后綴 .a 將跟隨它的名字變換為庫的名字 libstdc++.a。而后它在標準庫路徑中查找該庫。gcc 的編譯過程和輸出文件與 g++ 是完全相同的。

在大多數系統中,GCC 安裝時會安裝一名為 c++ 的程序。如果被安裝,它和 g++ 是等同,如下例所示,用法也一致:

$ c++ helloworld.cpp -o helloworld

2.多個源文件生成可執行程序

如果多于一個的源碼文件在 g++ 命令中指定,它們都將被編譯并被鏈接成一個單一的可執行文件。下面是一個名為 speak.h 的頭文件;它包含一個僅含有一個函數的類的定義:

/* speak.h */#include <iostream>class Speak{ public: void sayHello(const char *);};

下面列出的是文件 speak.cpp 的內容:包含 sayHello() 函數的函數體:

/* speak.cpp */ #include 'speak.h' void Speak::sayHello(const char *str) { std::cout << 'Hello ' << str << 'n'; }

文件 hellospeak.cpp 內是一個使用 Speak 類的程序:

/* hellospeak.cpp */#include 'speak.h'int main(int argc,char *argv[]){ Speak speak; speak.sayHello('world'); return(0);}

下面這條命令將上述兩個源碼文件編譯鏈接成一個單一的可執行程序:

$ g++ hellospeak.cpp speak.cpp -o hellospeak

PS:這里說一下為什么在命令中沒有提到“speak.h“該文件(原因是:在“speak.cpp“中包含有”#include'speak.h'“這句代碼,它的意思是搜索系統頭文件目錄之前將先在當前目錄中搜索文件“speak.h“。而”speak.h“正在該目錄中,不用再在命令中指定了)。

3.源文件生成對象文件

選項 -c 用來告訴編譯器編譯源代碼但不要執行鏈接,輸出結果為對象文件。文件默認名與源碼文件名相同,只是將其后綴變為 .o。例如,下面的命令將編譯源碼文件 hellospeak.cpp 并生成對象文件 hellospeak.o:

$ g++ -c hellospeak.cpp

命令 g++ 也能識別 .o 文件并將其作為輸入文件傳遞給鏈接器。下列命令將編譯源碼文件為對象文件并將其鏈接成單一的可執行程序:

$ g++ -c hellospeak.cpp$ g++ -c speak.cpp$ g++ hellospeak.o speak.o -o hellospeak

選項 -o 不僅僅能用來命名可執行文件。它也用來命名編譯器輸出的其他文件。例如:除了中間的對象文件有不同的名字外,下列命令生將生成和上面完全相同的可執行文件:

$ g++ -c hellospeak.cpp -o hspk1.o$ g++ -c speak.cpp -o hspk2.o $ g++ hspk1.o hspk2.o -o hellospeak

4.編譯預處理

選項 -E 使 g++ 將源代碼用編譯預處理器處理后不再執行其他動作。下面的命令預處理源碼文件 helloworld.cpp 并將結果顯示在標準輸出中:

$ g++ -E helloworld.cpp

本文前面所列出的 helloworld.cpp 的源代碼,僅僅有六行,而且該程序除了顯示一行文字外什么都不做,但是,預處理后的版本將超過 1200 行。這主要是因為頭文件 iostream 被包含進來,而且它又包含了其他的頭文件,除此之外,還有若干個處理輸入和輸出的類的定義。

預處理過的文件的 GCC 后綴為 .ii,它可以通過 -o 選項來生成,例如:

$ gcc -E helloworld.cpp -o helloworld.ii

5.生成匯編代碼

選項 -S 指示編譯器將程序編譯成匯編語言,輸出匯編語言代碼而後結束。下面的命令將由 C++ 源碼文件生成匯編語言文件 helloworld.s:

$ g++ -S helloworld.cpp

生成的匯編語言依賴于編譯器的目標平臺。

6.創建靜態庫

靜態庫是編譯器生成的一系列對象文件的集合。鏈接一個程序時用庫中的對象文件還是目錄中的對象文件都是一樣的。庫中的成員包括普通函數,類定義,類的對象實例等等。靜態庫的另一個名字叫歸檔文件(archive),管理這種歸檔文件的工具叫 ar 。

在下面的例子中,我們先創建兩個對象模塊,然后用其生成靜態庫。

頭文件 say.h 包含函數 sayHello() 的原型和類 Say 的定義:

/* say.h */#include <iostream>void sayhello(void);class Say { private: char *string; public: Say(char *str) { string = str; } void sayThis(const char *str) { std::cout << str << ' from a static libraryn'; } void sayString(void);};

下面是文件 say.cpp 是我們要加入到靜態庫中的兩個對象文件之一的源碼。它包含 Say 類中 sayString() 函數的定義體;類 Say 的一個實例 librarysay 的聲明也包含在內:

/* say.cpp */#include 'say.h'void Say::sayString(){ std::cout << string << 'n';}Say librarysay('Library instance of Say');

源碼文件 sayhello.cpp 是我們要加入到靜態庫中的第二個對象文件的源碼。它包含函數 sayhello() 的定義:

/* sayhello.cpp */#include 'say.h'void sayhello() { std::cout << 'hello from a static libraryn'; }

下面的命令序列將源碼文件編譯成對象文件,命令 ar 將其存進庫中:

$ g++ -c sayhello.cpp $ g++ -c say.cpp $ ar -r libsay.a sayhello.o say.o

程序 ar 配合參數 -r 創建一個新庫 libsay.a 并將命令行中列出的對象文件插入。采用這種方法,如果庫不存在的話,參數 -r 將創建一個新的庫,而如果庫存在的話,將用新的模塊替換原來的模塊。

下面是主程序 saymain.cpp,它調用庫 libsay.a 中的代碼:

/* saymain.cpp */#include 'say.h'int main(int argc,char *argv[]){ extern Say librarysay; Say localsay = Say('Local instance of Say'); sayhello(); librarysay.sayThis('howdy'); librarysay.sayString(); localsay.sayString(); return(0);}

該程序可以下面的命令來編譯和鏈接:

$ g++ saymain.cpp libsay.a -o saymain

程序運行時,產生以下輸出:

hello from a static libraryhowdy from a static libraryLibrary instance of SayLocal instance of Say

總結

到此這篇關于linux下使用g++編譯cpp工程的文章就介紹到這了,更多相關linux g++編譯cpp內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Linux系統
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美日韩一区自拍| 久久久久久黄| 日本午夜精品| 高清av不卡| 红桃视频欧美| av资源中文在线| 欧美+日本+国产+在线a∨观看| 99视频精品全部免费在线视频| 欧美精品不卡| 国内精品福利| 国产精品综合色区在线观看| 香蕉久久国产| 国产精品久久久久久久久久齐齐| 亚洲二区三区不卡| 国产一卡不卡| 欧美日韩中文字幕一区二区三区| 日韩av中文在线观看| 成人污污视频| 欧美中文字幕| 成人台湾亚洲精品一区二区| 香蕉久久精品| 日本h片久久| 国产精品一区二区精品视频观看 | 日本欧美一区| 国产伦精品一区二区三区视频 | 免费亚洲婷婷| 欧美日韩一二三四| 日韩激情视频网站| 亚洲黄色网址| 久久不见久久见免费视频7| 午夜久久一区| 999国产精品| 久久在线电影| 日本精品影院| 99国产精品视频免费观看一公开 | 国产亚洲一区二区手机在线观看 | 欧美日韩亚洲一区在线观看| 欧美日韩国产欧| 亚洲专区视频| 国产一区调教| 婷婷成人在线| 日本不卡在线视频| 国产精品主播| 国产精品一国产精品k频道56| 欧美日韩视频一区二区三区| 国产一区二区三区亚洲| 国产情侣一区在线| 欧美亚洲国产精品久久| 麻豆精品在线| 久久三级中文| 美女国产精品久久久| 中文日韩欧美| 午夜精品婷婷| 男人操女人的视频在线观看欧美| 亚洲国产日韩欧美在线| 国产精品毛片| 在线精品视频一区| 中文字幕亚洲影视| 日本亚洲欧美天堂免费| 亚洲精品影视| 只有精品亚洲| 日韩二区在线观看| 国产精品巨作av| 18国产精品| 福利一区视频| 久久久久久黄| 在线天堂资源www在线污| 日韩在线视频精品| 在线亚洲成人| 亚洲欧美视频| 国产精品一区二区三区四区在线观看 | 视频精品一区二区| 日韩欧美中文字幕一区二区三区| 亚洲另类av| 国产欧美三级| 日韩在线观看中文字幕| 鲁大师成人一区二区三区| 欧美日韩精品免费观看视频完整| 日韩影院在线观看| 日韩av专区| 日韩av资源网| 成人污污视频| 日韩精品一级二级| 国产欧美日韩在线观看视频| 韩国久久久久久| 欧美日韩国产高清电影| 欧美另类中文字幕 | 亚洲黄色在线| 啪啪国产精品| 日韩高清不卡在线| 91亚洲精品在看在线观看高清| 99成人在线视频| 欧美片第1页| 女同性一区二区三区人了人一 | 卡一卡二国产精品| 欧美sm一区| 日本久久精品| 免费观看久久久4p| 久久先锋影音| 午夜性色一区二区三区免费视频| 国产另类在线| 久久激情五月激情| 日韩欧美三区| 不卡专区在线| 日韩国产在线一| 国产精品午夜一区二区三区| 国产精品久久久久av蜜臀| 亚洲精品影院在线观看| 国内精品伊人| 国产精品国产一区| 国产精品99一区二区| 亚洲高清久久| 日韩精品亚洲一区二区三区免费| 国产伦精品一区二区三区视频| 麻豆视频久久| 日韩视频二区| 日韩精品一页| 久久免费影院| 爽好久久久欧美精品| 奇米777国产一区国产二区| 国产精品porn| 欧美美女一区| 国产亚洲字幕| 免费欧美一区| 国产精品视频3p| 国产一区二区中文| 亚洲欧美视频| 国产伊人久久| 亚洲精品无播放器在线播放| 久久精品一区| 天堂俺去俺来也www久久婷婷| 你懂的国产精品永久在线| 国产一区欧美| 久久久久久夜| 美女国产一区二区三区| 亚洲欧美成人综合| 国产精品久久久久久久久久10秀| 首页国产欧美久久| 高清不卡一区| 国产极品一区| 日韩国产欧美三级| 国产精品美女| 日韩欧美在线中字| 欧美一区在线观看视频| 欧美日韩国产高清| 久久精品电影| 久久只有精品| 国产精品日本一区二区不卡视频| 亚洲经典在线| 免费欧美一区| 久久精品国产68国产精品亚洲| 日韩国产欧美在线视频| 亚洲欧美久久久| 日韩视频中文| 香蕉国产精品| 亚洲欧美日韩国产一区二区| 五月天久久777| 荡女精品导航| 超碰在线99| 欧美1区2区3| 欧美激情一区| 国产精品久久久久77777丨| 日韩精品久久久久久| 日韩成人亚洲| 日韩国产一区二区三区| 激情综合婷婷| 久久福利影视| 国产日韩欧美一区在线| 久久免费视频66| 蜜臀国产一区| 91精品99| 亚洲黑丝一区二区| 日韩极品在线观看| 精品国产一区二区三区噜噜噜| 美女福利一区二区三区| 久久精品高清| 久久亚洲美女| 亚洲精品婷婷| 成人国产精品久久| 激情久久久久久久| 日韩黄色免费网站| 热三久草你在线| 88久久精品| 成人羞羞在线观看网站| 国产精品毛片| 欧美激情麻豆| 91久久中文| 黄色精品视频| 亚州精品视频| 久久uomeier| 亚洲精品第一| 久久久男人天堂| 西西人体一区二区| 美女视频黄 久久| 免播放器亚洲| 久久久久久久欧美精品| 亚洲麻豆一区| 欧美精品影院| 欧美午夜不卡| 国产精品99在线观看|