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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

發布時間:2023/11/28 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc 和 g++ 的联系和区别,使用 gcc 编译 c++ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

GCC 編譯器已經為我們提供了調用它的接口,對于 C 語言或者 C++ 程序,可以通過執行 gcc 或者 g++ 指令來調用 GCC 編譯器。

實際使用中我們更習慣使用 gcc 指令編譯 C 語言程序,用 g++ 指令編譯 C++ 代碼。需要強調的一點是,這并不是 gccg++ 的區別,gcc 指令也可以用來編譯 C++ 程序,同樣 g++ 指令也可以用于編譯 C 語言程序。

實際上,只要是 GCC 支持編譯的程序代碼,都可以使用 gcc 命令完成編譯。可以這樣理解,gccGCC 編譯器的通用編譯指令,因為根據程序文件的后綴名,gcc 指令可以自行判斷出當前程序所用編程語言的類別,比如:

  • xxx.c:默認以編譯 C 語言程序的方式編譯此文件
  • xxx.cpp:默認以編譯 C++ 程序的方式編譯此文件
  • xxx.m:默認以編譯 Objective-C 程序的方式編譯此文件
  • xxx.go:默認以編譯 Go 語言程序的方式編譯此文件

當然,gcc 指令也為用戶提供了 “手動指定代表編譯方式” 的接口,即使用 -x 選項:

  • gcc -xc xxx 表示以編譯 C 語言代碼的方式編譯 xxx 文件
  • gcc -xc++ xxx 則表示以編譯 C++ 代碼的方式編譯 xxx 文件

但如果使用 g++ 指令,則無論目標文件的后綴名是什么,該指令都一律按照編譯 C++ 代碼的方式編譯該文件。也就是說,

  • 對于 .c 文件來說,gcc 指令以 C語言代碼對待,g++ 指令會以 C++ 代碼對待。
  • 但對于 .cpp 文件來說,gccg++ 都會以 C++ 代碼的方式編譯。

C++ 標準對代碼書寫規范的要求更加嚴格。

除此之外對于編譯執行 C++ 程序,使用 gccg++ 也是有區別的。要知道,很多 C++ 程序都會調用某些標準庫中現有的函數或者類對象,而單純的 gcc 命令是無法自動鏈接這些標準庫文件的。舉個例子:

//test.cpp
#include <iostream>
#include <string>
using namespace std;int main(){string str ="hello,world";cout << str << endl;return 0;
}

這是一段很簡單的 C++ 程序,其通過 <string> 頭文件提供的 string 字符串類定義了一個字符串對象,隨后使用 cout 輸出流對象將其輸出。對于這段 C++ 代碼,如果我們使用 g++ 指令編譯,如下所示:

[wohu@ubuntu~]$ g++ test.cpp
[wohu@ubuntu~]$

可以看到,整個編譯過程沒有報任何錯誤。但如果使用 gcc 指令:

[wohu@ubuntu~]$ gcc test.cpp
/tmp/ccluIPFx.o: In function `main':
test.cpp:(.text+0x20): undefined reference to `std::allocator<char>::allocator()'
....
/tmp/ccluIPFx.o:(.eh_frame+0x13): undefined reference to `__gxx_personality_v0'
collect2: error: ld returned 1 exit status

其根本原因就在于,該程序中使用了標準庫 <iostream><string> 提供的類對象,而 gcc 默認是無法找到它們的。

如果想使用 gcc 指令來編譯執行 C++ 程序,需要在使用 gcc 指令時,手動為其添加 -lstdc++ 選項,表示 gcc 在編譯 C++ 程序時可以鏈接必要的 C++ 標準庫。如下示例:

[wohu@ubuntu~]$ gcc test.cpp -lstdc++ 
[wohu@ubuntu~]$

由此,test.cpp 就被成功的編譯了。

對于 gccg++ 指令,還有其它更多細節方面的區別,當前只需要知道:

  • 對于 C 語言程序的編譯,我們應該使用 gcc 指令
  • 編譯 C++ 程序則推薦使用 g++ 指令

這就足夠了。

總結

以上是生活随笔為你收集整理的gcc 和 g++ 的联系和区别,使用 gcc 编译 c++的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。