日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Compiling Cpp(zz)

發(fā)布時(shí)間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Compiling Cpp(zz) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
zz: http://wiki.ubuntu.org.cn/Compiling_Cpp

C++ 編程中相關(guān)文件后綴

.a靜態(tài)庫(kù) (archive)
.C
.c
.cc
.cp
.cpp
.cxx
.c++
C++源代碼(需要編譯預(yù)處理)
.hC或者C++源代碼頭文件
.iiC++源代碼(不需編譯預(yù)處理)
.o對(duì)象文件
.s匯編語(yǔ)言代碼
.so動(dòng)態(tài)庫(kù)
<none>標(biāo)準(zhǔn)C++系統(tǒng)頭文件

[編輯] 單個(gè)源文件生成可執(zhí)行程序

下面是一個(gè)保存在文件 helloworld.cpp 中一個(gè)簡(jiǎn)單的 C++ 程序的代碼:

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

程序使用定義在頭文件 iostream 中的 cout,向標(biāo)準(zhǔn)輸出寫(xiě)入一個(gè)簡(jiǎn)單的字符串。該代碼可用以下命令編譯為可執(zhí)行文件:

$ g++ helloworld.cpp

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

$ ./a.out hello, world

更普遍的做法是通過(guò) -o 選項(xiàng)指定可執(zhí)行程序的文件名。下面的命令將產(chǎn)生名為 helloworld 的可執(zhí)行文件:

$ g++ helloworld.cpp -o helloworld

在命令行中輸入程序名可使之運(yùn)行:

$ ./helloworld hello, world

程序 g++ 是將 gcc 默認(rèn)語(yǔ)言設(shè)為 C++ 的一個(gè)特殊的版本,鏈接時(shí)它自動(dòng)使用 C++ 標(biāo)準(zhǔn)庫(kù)而不用 C 標(biāo)準(zhǔn)庫(kù)。通過(guò)遵循源碼的命名規(guī)范并指定對(duì)應(yīng)庫(kù)的名字,用 gcc 來(lái)編譯鏈接 C++ 程序是可行的,如下例所示:

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

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

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

$ c++ helloworld.cpp -o helloworld

[編輯] 多個(gè)源文件生成可執(zhí)行程序

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

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

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

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

文件 hellospeak.cpp 內(nèi)是一個(gè)使用 Speak 類(lèi)的程序:

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

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

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

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

[編輯] 源文件生成對(duì)象文件

選項(xiàng) -c 用來(lái)告訴編譯器編譯源代碼但不要執(zhí)行鏈接,輸出結(jié)果為對(duì)象文件。文件默認(rèn)名與源碼文件名相同,只是將其后綴變?yōu)?.o。例如,下面的命令將編譯源碼文件 hellospeak.cpp 并生成對(duì)象文件 hellospeak.o:

$ g++ -c hellospeak.cpp

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

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

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

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

[編輯] 編譯預(yù)處理

選項(xiàng) -E 使 g++ 將源代碼用編譯預(yù)處理器處理后不再執(zhí)行其他動(dòng)作。下面的命令預(yù)處理源碼文件 helloworld.cpp 并將結(jié)果顯示在標(biāo)準(zhǔn)輸出中:

$ g++ -E helloworld.cpp

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

預(yù)處理過(guò)的文件的 GCC 后綴為 .ii,它可以通過(guò) -o 選項(xiàng)來(lái)生成,例如:

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

[編輯] 生成匯編代碼

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

$ g++ -S helloworld.cpp

生成的匯編語(yǔ)言依賴于編譯器的目標(biāo)平臺(tái)。

[編輯] 創(chuàng)建靜態(tài)庫(kù)

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

在下面的例子中,我們先創(chuàng)建兩個(gè)對(duì)象模塊,然后用其生成靜態(tài)庫(kù)。

頭文件 say.h 包含函數(shù) sayHello() 的原型和類(lèi) 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 library\n";}void sayString(void); }; 下面是文件 say.cpp 是我們要加入到靜態(tài)庫(kù)中的兩個(gè)對(duì)象文件之一的源碼。它包含 Say 類(lèi)中 sayString() 函數(shù)的定義體;類(lèi) Say 的一個(gè)實(shí)例 librarysay 的聲明也包含在內(nèi): /* say.cpp */ #include "say.h" void Say::sayString() {std::cout << string << "\n"; }Say librarysay("Library instance of Say"); 源碼文件 sayhello.cpp 是我們要加入到靜態(tài)庫(kù)中的第二個(gè)對(duì)象文件的源碼。它包含函數(shù) sayhello() 的定義: /* sayhello.cpp */ #include "say.h" void sayhello() {std::cout << "hello from a static library\n"; } 下面的命令序列將源碼文件編譯成對(duì)象文件,命令 ar 將其存進(jìn)庫(kù)中: $ g++ -c sayhello.cpp $ g++ -c say.cpp $ ar -r libsay.a sayhello.o say.o

程序 ar 配合參數(shù) -r 創(chuàng)建一個(gè)新庫(kù) libsay.a 并將命令行中列出的對(duì)象文件插入。采用這種方法,如果庫(kù)不存在的話,參數(shù) -r 將創(chuàng)建一個(gè)新的庫(kù),而如果庫(kù)存在的話,將用新的模塊替換原來(lái)的模塊。

下面是主程序 saymain.cpp,它調(diào)用庫(kù) 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); }

該程序可以下面的命令來(lái)編譯和鏈接:

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

程序運(yùn)行時(shí),產(chǎn)生以下輸出:

hello from a static library howdy from a static library Library instance of Say Local instance of Say

轉(zhuǎn)載于:https://www.cnblogs.com/suneast/p/5941893.html

總結(jié)

以上是生活随笔為你收集整理的Compiling Cpp(zz)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美激情精品久久久久久蜜臀 | 国精品人妻无码一区二区三区喝尿 | 人妻天天爽夜夜爽一区二区三区 | 蜜桃av久久久亚洲精品 | 精品国产自在精品国产精小说 | 中文字幕一区二区精品 | 亚洲女人18毛片水真多 | 久久久精品动漫 | www狠狠爱 | 国产色诱视频 | 在线干 | 久草超碰 | 成人久久精品人妻一区二区三区 | 国内三级视频 | 亚洲自拍偷拍精品 | 99久久久无码国产精品性波多 | 波多野结衣视频一区 | 中文写幕一区二区三区免费观成熟 | 久久精品国产亚洲av久一一区 | 精品视频在线一区二区 | 亚洲视频在线观看网站 | 少妇高潮久久久久久潘金莲 | 韩日av| 91精品视频免费 | 婷婷超碰 | 精品久久久无码中文字幕边打电话 | www伊人网 | 欧美成人看片黄a免费看 | 人与动物2免费观看完整版电影高清 | 伊人影院中文字幕 | 欧美激情区 | 熟妇一区二区三区 | 波多野结衣加勒比 | 成人动漫免费在线观看 | 欧美性生活精品 | zzjj国产精品一区二区 | 欧美性高潮视频 | 欧美老肥妇做.爰bbww视频 | 新版红楼梦在线高清免费观看 | 午夜免费播放观看在线视频 | 桃色av网站 | 欧美日韩一区二区在线观看视频 | 视频一区欧美 | 快播av在线 | 足交在线观看 | 欧美成人黄色 | 日本学生初尝黑人巨免费视频 | 麻豆蜜桃91| 97日韩精品 | 白浆在线 | 黄色a区 | a天堂资源在线观看 | 狠狠躁夜夜躁xxxxaaaa | 人人综合| 亚洲污视频 | 九九色综合网 | 中国免费看的片 | 日韩中文一区二区 | 国产尤物在线观看 | 色综合视频在线 | 在线观看欧美一区 | 日韩午夜片 | 国产男女无遮挡猛进猛出 | 日韩a毛片 | 三级全黄做爰龚玥菲在线 | 少妇又紧又深又湿又爽视频 | 色多多视频在线 | 国产成人精品一区二三区 | 日韩一级片网址 | 自拍偷拍第二页 | 国产妇女馒头高清泬20p多 | 成人区精品一区二区婷婷 | 丝袜制服一区 | 淫片在线 | 永久免费无码av网站在线观看 | 中文字幕一区二区人妻在线不卡 | 不卡日韩 | wwwxx欧美| 色妞综合网 | 久久久久久久久久久综合 | 亚洲jizzjizz日本少妇 | 午夜吃瓜 | 97人人爽 | 真实新婚偷拍xxxxx | 高h乱l高辣h文短篇h | 国产综合99 | 婷婷6月天 | 黄色一级大片在线免费看国产一 | 一级黄色录像大片 | 中文字幕手机在线视频 | 免费午夜视频 | 亚洲av无码精品色午夜果冻不卡 | 亚洲av永久无码精品一区二区国产 | 久草黄色| 人人爱人人草 | julia一区| 最新中文字幕在线播放 | 99热激情| 亚洲伦理自拍 |