簡體   English   中英

使用 gcc 編譯 C++ 程序

[英]Compiling a C++ program with gcc

問題:如何用gcc編譯器編譯C++程序?

信息.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

當我嘗試編譯info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

gcc 編譯器不能編譯 C++ 程序嗎? 在相關說明中,gcc 和 g++ 之間有什么區別。 謝謝,

gcc實際上可以很好地編譯c ++代碼。 您收到的錯誤是鏈接器錯誤,而不是編譯器錯誤。

可能的情況是,如果您將編譯行更改為:

gcc info.C -lstdc++

這使它鏈接到標准的c ++庫,然后它將工作得很好。

但是,你應該讓你的生活更輕松,並使用g ++。


編輯:

魯普說, 對另一個答案的評論最好:

[...] gcc將根據文件擴展名選擇正確的后端編譯器(即將.c編譯為C,將.cc編譯為C ++)並默認將二進制文件與標准C和GCC幫助程序庫相鏈接,而不管輸入語言; g ++也將基於擴展選擇正確的后端,除了我認為它將所有C源代碼編譯為C ++(即它將.c和.cc編譯為C ++),並且無論輸入語言如何,它在鏈接步驟中都包含libstdc ++。

如果你給代碼一個.c擴展名,編譯器認為它是C代碼,而不是C ++。 C ++編譯器驅動程序稱為g ++,如果使用gcc驅動程序,則會出現鏈接器問題,因為默認情況下標准C ++庫不會鏈接。 所以你要:

g++ myprog.cpp

甚至不要考慮使用大寫的.C擴展名,除非你永遠不想移植你的代碼,並准備好被你工作的人討厭。

使用g++而不是gcc

gcc和g ++之間的區別是:

     gcc            |        g++
compiles c source   |   compiles c++ source

使用g ++而不是gcc來編譯c ++源代碼。

默認情況下,gcc根據文件擴展名選擇語言,但您可以強制gcc使用-x選項選擇不同的語言后端:

gcc -x c++

更多選項在gcc手冊頁的“選項控制輸出類型”下詳細說明。 參見例如http://linux.die.net/man/1/gcc (在頁面上搜索文本-x language )。

在gcc無法使用文件擴展名猜測語言的情況下,此工具非常有用,例如,如果您生成代碼並通過stdin將其提供給gcc。

它對我很有用。 只有cmd中的一行代碼。

首先,確認您已安裝gcc (用於c)或g ++ (用於c ++)編譯器。

在cmd中為gcc類型:

gcc --version

在cmd中為g ++類型:

g ++ --version

如果已安裝,請繼續。

現在,使用cmd編譯.c或.cpp

for .c語法:

gcc -o exe_filename yourfilename.c

例:

gcc -o myfile myfile.c

這里exe_filename(示例中myfile)是您要在編譯后生成的.exe文件的名稱(注意:我沒有在此處添加任何擴展名)。 yourfilename.c(示例中的myfile.c)源文件 ,其擴展名為.c。

現在轉到包含.c文件的文件夾,在這里您將找到擴展名為.exe的文件。 打開它吧。 歡呼..

對於.cpp語法:

g ++ -o exe_filename yourfilename.cpp

之后,該過程與.c相同。

如果我沒記錯的話,gcc會根據后綴確定文件類型。 所以,讓它成為foo.cc,它應該工作。

而且,為了回答你的另一個問題, 就是“gcc”和“g ++”之間的區別。 gcc是一個選擇正確編譯器的前端。

對於 .cpp 文件:

          g++ myprog.cpp -o myprog

我的gcc 版本 10.3.0在 Ubuntu 上的更新。 即使我添加-lstdc++或使用正確的擴展名,也必須在系統上安裝cc1plus ,否則會出現此錯誤:

gcc: fatal error: cannot execute ‘cc1plus’: execvp: No such file or directory

獲得它的一種方法是安裝g++即使您不打算直接使用它,例如sudo apt install g++

現在,如果我使用擴展名.cc我可以直接調用gcc ,但是,仍然會出現警告和錯誤。 要使用gcc干凈,具有.c擴展我不得不把它像這樣

gcc -x c++ info.c -lstdc++

如果我使用.cc擴展名, .cc短,就像接受的答案一樣

gcc info.cc -lstdc++

或者像其他人所說的那樣,只需使用g++ info.c代替,不需要額外的參數來指示 C++,並且它適用於.c.cc.cpp擴展名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM