成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:306日期: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系統
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91麻豆精品秘密| 亚洲国产中文字幕| 夜夜亚洲天天久久| 国产精品三级在线观看| 成人av网站在线观看免费| 久久精品综合| 日本一区二区综合亚洲| av一区二区三区四区| 久久蜜桃资源一区二区老牛| 亚洲永久精品国产| 国产视频精品网| 久久品道一品道久久精品| 美腿丝袜亚洲三区| 日韩视频三区| 亚洲免费在线观看| fc2成人免费人成在线观看播放| 欧美一区二区三区啪啪| 午夜精品久久久久久久久| 亚欧成人精品| 亚洲色大成网站www久久九九| 狠狠色狠狠色综合日日tαg| 精品国精品国产尤物美女| 国产宾馆实践打屁股91| 精品国内二区三区| 欧美不卡三区| 中文字幕在线观看不卡视频| 亚洲欧洲精品一区| 国产日韩欧美a| 欧美日韩亚洲一区| 中文字幕亚洲视频| 91香蕉国产在线观看软件| 久久这里只精品最新地址| av在线这里只有精品| 国产日韩精品视频一区| 亚洲午夜电影| 久久久久久久久久电影| 欧美日韩四区| 亚洲色欲色欲www在线观看| 色综合天天综合网天天狠天天| 国产无一区二区| 成人av动漫网站| 国产精品系列在线| 99久久精品免费看国产| 日韩美一区二区三区| 牛人盗摄一区二区三区视频| 中文字幕在线观看不卡视频| 在线视频精品一区| 日韩电影一区二区三区四区| 欧美视频在线一区| 国产成人自拍网| 欧美激情综合五月色丁香小说| 国产成人超碰人人澡人人澡| 久久夜色精品一区| 一区二区亚洲精品| 欧美激情一区二区三区在线| 亚洲欧洲午夜| 免费看精品久久片| 日本电影欧美片| 国产高清无密码一区二区三区| 久久久久久久久久久久电影| 亚洲午夜精品久久| 亚洲bt欧美bt精品| 欧美精品在线观看一区二区| 92国产精品观看| 中文字幕一区二区三区蜜月| 久久先锋影音| 国产aⅴ精品一区二区三区色成熟| 久久久精品国产免费观看同学| 一区二区三区国产在线| 久久国内精品视频| 欧洲在线/亚洲| 免费成人你懂的| 久久久精品欧美丰满| 在线一区免费观看| 精品一区二区三区免费观看| 国产人久久人人人人爽| 久久久久久九九九九| 成人免费精品视频| 精品国产一区二区三区四区四| 在线观看一区欧美| 青青草精品视频| 精品福利在线导航| 亚洲一区在线免费| 日韩高清一区在线| 久久免费看少妇高潮| 另类天堂av| 奇米精品一区二区三区四区| 精品国产乱码久久久久久老虎| 在线成人欧美| 国产一区二区三区免费| 国产欧美一二三区| 色一情一乱一乱一91av| 不卡的电影网站| 亚洲线精品一区二区三区| 久久蜜桃精品| 99九九99九九九视频精品| 日日夜夜一区二区| 欧美久久久久久久久久| 一区二区视频欧美| 国产精品白丝av| 亚洲欧美日韩中文播放| 欧美一区2区视频在线观看| 91玉足脚交白嫩脚丫在线播放| 天天av天天翘天天综合网| 精品粉嫩aⅴ一区二区三区四区| 美女视频一区免费观看| 精品在线一区二区| ●精品国产综合乱码久久久久| 在线播放91灌醉迷j高跟美女| 成人高清视频在线观看| 午夜激情久久久| 国产精品麻豆欧美日韩ww| 国产精品免费在线| 美腿丝袜亚洲三区| 国产精品电影一区二区三区| 欧美日韩国产精选| 99国产精品久| 亚洲天堂av老司机| 久久天天狠狠| 欧美黄色一级视频| 亚洲码国产岛国毛片在线| 媚黑女一区二区| 91视视频在线直接观看在线看网页在线看 | 日韩av不卡在线观看| 久久免费精品国产久精品久久久久| 黄色亚洲免费| 日韩**一区毛片| 中文字幕日韩一区二区| 久久亚洲美女| 狠狠色噜噜狠狠狠狠色吗综合| 乱中年女人伦av一区二区| 一区二区不卡在线视频 午夜欧美不卡在 | 成人手机电影网| 久久精品国产免费| 欧美极品aⅴ影院| 日韩你懂的在线播放| 日本精品免费观看高清观看| 99爱精品视频| 欧美激情视频一区二区三区免费| 国产精品66部| 亚洲图片激情小说| 久久久一区二区| 久久久久国产精品午夜一区| 成人国产电影网| 亚洲成人你懂的| 亚洲日本在线观看| 国产精品每日更新在线播放网址| 欧美在线观看视频一区二区| 黄色av日韩| 91麻豆精品一区二区三区| 日本在线观看不卡视频| 亚洲一区日韩精品中文字幕| 国产精品国产三级国产普通话蜜臀| 久久精品视频一区| 欧美在线免费播放| 激情综合电影网| 欧美二区在线| 99久久精品一区二区| 丰满白嫩尤物一区二区| 国产精品中文字幕欧美| 日韩影院在线观看| 亚洲国产wwwccc36天堂| 国产亚洲人成网站| 精品久久久久久最新网址| 日韩欧美不卡一区| 亚洲一区二区在| 欧美呦呦网站| 国产原创一区二区三区| 激情综合色播激情啊| 亚洲一二三区不卡| 欧美极品xxx| 国产喂奶挤奶一区二区三区| 久久久夜色精品亚洲| 国产日韩精品久久久| 制服.丝袜.亚洲.另类.中文| 欧美挠脚心视频网站| 玖玖精品视频| 国产精品国色综合久久| 欧美三级特黄| 亚洲图片欧洲图片日韩av| 国产成人精品在线看| 国产福利一区在线| 国产精品一区二区久久精品爱涩| 亚洲成人免费看| 日韩高清一区在线| 奇米精品一区二区三区在线观看 | 亚洲天堂a在线| 欧美精品一区二区三区蜜桃视频 | 久久青草久久| 日韩午夜视频在线观看| 91在线免费视频观看| 国产一区不卡在线| 国产精品一区二区三区四区| 国产成人av影院| 91免费小视频| 播五月开心婷婷综合| 女同一区二区| 成人一道本在线| 91首页免费视频| 亚洲国产精选|