簡體   English   中英

使用 c++ 命令而不是 g++ (Linux) 編譯 .cpp 文件

[英]Compiling a .cpp file with c++ command instead of g++ (Linux)

假設我們有一個名為hello.cpp的簡單 C++ 文件,它打印“Hello World!”。

我們通常使用g++ hello.cpp創建可執行文件。 當我嘗試執行命令c++ hello.cpp它成功創建了可執行文件。 它不應該拋出一個錯誤,說沒有可用的 c++ 命令嗎? 並建議我們使用 g++?

我嘗試在終端上運行man c++ ,這會打開 GNU C 項目頁面。 那么,終端是否在內部用g++ hello.cpp替換了我們的c++ hello.cpp 它不應該這樣做嗎?

附加信息:
同樣,如果我有一個打印“Hello World!”的hello.c程序。 當我在命令行上執行c hello.c時,出現錯誤:

$ c hello.c
c: command not found

這是意料之中的,因為我們必須使用gcc hello.c 為什么c++ hello.cpp沒有得到類似的錯誤?

在我的 Ubuntu 系統上,我看到了這個:

$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 May  6  2019 /usr/bin/c++ -> /etc/alternatives/c++
ssd@c3-0:~$ ls -l /etc/alternatives/c++
$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 May  6  2019 /etc/alternatives/c++ -> /usr/bin/g++

所以c++實際上是g++的別名(符號鏈接)

替代系統允許將編譯器 c++ 的別名更改為:

$ update-alternatives --display c++
c++ - auto mode
  link best version is /usr/bin/g++
  link currently points to /usr/bin/g++
  link c++ is /usr/bin/c++
  slave c++.1.gz is /usr/share/man/man1/c++.1.gz
/usr/bin/clang++ - priority 10
/usr/bin/g++ - priority 20
  slave c++.1.gz: /usr/share/man/man1/g++.1.gz

所以 c++ 實際上可以是 g++ 或 clang++

對於 C 編譯器,您不需要c命令,而是cc ,它同樣可以是 gcc 或 clang。

我的 CentOS 系統的符號鏈接不是很明顯,但是g++ --versionc++ --version給出了相同的輸出,並且都說它們是 g++。 但是, cc 是那里 gcc 的直接符號鏈接。

它不應該拋出一個錯誤,說沒有可用的 c++ 命令嗎? 並建議我們使用 g++?

Weeellll,沒有任何規定或標准限制或要求c++命令做任何事情,所以沒有“應該”或“不應該”。 然而,強烈期望c++是一個工作的 C++ 兼容編譯器,它支持與cc類似或相同的標志。

終端是否在內部用 g++ hello.cpp 替換了我們的 c++ hello.cpp?

終端是顯示事物的設備。 終端不會替換它,它對它沒有影響。

很可能是您的系統設計師,但也可能是管理員、出版商、分銷商或包設計師(或鏈中的任何人),將您的系統配置為提供名為c++的命令。 通常,該命令是指向工作 C++ 編譯器的符號鏈接,在 Linux 系統上通常是 g++。 在我的系統上, /usr/bin/c++程序剛安裝了名為gcc,但有些系統允許它是可 配置的

它不應該這樣做嗎?

如上所述,終端不應該替換命令,它對它沒有影響。

這是預期的,因為

這是預期的,因為沒有名為c命令。 還有無窮無盡的其他未知命令。

cc是 C 編譯器的古老名稱。 c99是 C99 兼容編譯器的標准化名稱。

為什么 c++ hello.cpp 沒有出現類似的錯誤?

因為您的系統上存在名為c++的命令。

暫無
暫無

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

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