2013年12月26日 星期四

[Compiler] Different between gcc and g++

這幾天在玩cross-compiler 的重build,換來換去,突然發現 gcc 跟 g++ 的差別呢?

當然
"g++ 是C++ 的compiler, gcc 是C的compiler" 這個說法隨便google就一堆文章(還都是CP的) 跟你說.... 喔不... 它們不是這樣的!!!

光看不過癮,來手動證明一下。(絕對不是為了一天一筆記的目標亂充數!!!)




google 大神說:
g++ 在編譯過程中,compiler 還是呼叫 gcc
link 才呼叫g++
事實上... link 也可以呼叫gcc

手動!!
File name: bejo.cc

#include <iostream>
using namespace std;
int main() {
    cout << "Hello,world!" <<endl;
    return 0;
}
Compiler:
# g++ bejo.cc -o bejo
# ./bejo
Hello,world!
沒問題

#gcc bejo.cc -o bejo
/tmp/ccxrSgbL.o: In function `main':
bejo.cc:(.text+0x14): undefined reference to `std::cout'
bejo.cc:(.text+0x19): undefined reference to `std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)'

(delete...)
有問題!!!
Link 錯了...

# gcc -lstdc++ bejo.cc -o bejo
#./bejo 
Hello,world!

----> gcc表示: 我也很行的!!!

PS.
通常附檔名是用來辨認C or C++,例子用.cc 其實很微妙(.cpp 略佳XD)
要"拉天"一下也可以

# gcc -x c++ -lstdc++ bejo.aa -o bejo
# ./bejo 
Hello,world!

靠 -x 來指定語言,無視。
--

其實這小東西早就知道,這幾天搜尋文件,卻發現絕大部分的網站都cp來cp去,內容相似,看了就懂,可就沒有親自跑一下的感覺,但往往Open Source最有用的東西不是cp來.. 而是前人手動血淚阿...
趁重build toolchain 的時間,塗鴉一篇 哈。(一天一篇筆記好像有點難 O__Q)