2012-10-24 141 views
2

我是Linux編程新手(Ubuntu服務器)。Ubuntu編譯器(C++)

指令之間有什麼區別:

c++ -c main.cpp -o main.o -lstdc++ 
c++ -c Console.cpp -o Console.o -lstdc++ 
c++ main.o Console.o -o App1 

這:

g++ -c main.cpp -o main.o -lstdc++ 
g++ -c Console.cpp -o Console.o -lstdc++ 
g++ main.o Console.o -o App1 

是這些指令的一樣嗎? C++指令是否爲g ++提供了另一個名稱?

+0

爲什麼你指定-lstdC++在編譯命令行?它只會在連接線上有意義,但是無論如何都要假設libstdC++。 –

回答

2

他們都使用我相信的GNU C++編譯器。所以是的,他們是一樣的。

+1

'C++'可以鏈接到'g ++',但不一定。 – scai

1

是的,他們都是一樣的,打字

which c++ 

爲您提供了c++其實。然後鍵入

ll /usr/bin/c++ 

會給你

lrwxrwxrwx 1 root root 21 Sep 4 17:00 /usr/bin/c++ -> /etc/alternatives/c++* 

然後

ll /etc/alternatives/c++ 

會給你

lrwxrwxrwx 1 root root 12 Sep 4 17:00 /etc/alternatives/c++ -> /usr/bin/g++* 

所以是的,它們是相同的(有一個符號鏈接從C++到g ++)。

+0

這只是默認值,'/ etc/alternatives/C++'不必指向'/ usr/bin/g ++'。 – scai

1

只要尋找自己:

$ ls -l /usr/bin/c++ /usr/bin/g++ /etc/alternatives/c++ 

lrwxrwxrwx 1根根部12 6月2日19時41分的/ etc /替代/ C++ - >的/ usr /斌/克++ *
lrwxrwxrwx 1根根21 6月2日19點41分的/ usr/bin中/ C++ - >的/ etc /替代/ C++ *
lrwxrwxrwx 1根根部7年03月13 2012的/ usr /斌/克++ - >克++ - 4.6 *

或做:

$ c++ -v 

$ g++ -v 
3

是的,缺省爲g ++。您可以使用update-alternatives --display c++進行檢查;通過sudo update-alternatives c++

update-alternatives --config c++ 
There are 2 choices for the alternative c++ (providing /usr/bin/c++). 

    Selection Path    Priority Status 
------------------------------------------------------------ 
* 0   /usr/bin/g++  20  auto mode 
    1   /usr/bin/clang++ 10  manual mode 
    2   /usr/bin/g++  20  manual mode 
2

他們很可能是相同的更改。您可以顯式檢查:

其中C++

在/ usr/bin中/ C++

ls -l命令在/ usr/bin中/ C++

的/ etc /替代品/ C++

ls -l etc/alternatives/C++

/usr/bin/g ++

1

g++表示GNU C++編譯器。

c++表示一個非特定的C++編譯器,但它必須鏈接到一個特定的編譯器。如果你的情況,這只是一個到GNU C++編譯器的符號鏈接,那麼沒有什麼區別。但是,您可以將符號鏈接點指向不同的C++編譯器。

1

是的。

以下是如何找出這些類型的東西

要找到一個可執行文件的路徑:

which c++ 

要檢查它是否是一個文件或符號鏈接:

ls -ald `which c++` 

要檢查它是什麼類型的文件:

file `which c++` 

要獲得可用於將其與其他文件校驗:

md5sum `which c++` 

這裏如果c檢查的一種方式++和g ++是相等的:

[ `md5sum $(which c++) | cut -d' ' -f1` == `md5sum $(which g++) | cut -d' ' -f1` ] && echo Yes, equal content || echo No, unequal content