小议gcc与g++的不同

写c++程序时,如果使用gcc编译,经常会遇到一些奇怪的链接错误,如

test.cpp:(.text+0xa): undefined reference to `std::cout'

错误为编译的目标代码在库中找不到对应的符号来链接,如果这个库是标准库之类的库文件,则将gcc指令替换为g++,一般可以解决这样的链接错误。这样的结果,容易让人认为, gcc是c编译器,g++是c++编译器,事实真的是这么简单么?

根据stack overflow上的一篇问答http://stackoverflow.com/questions/172587/what-is-the-difference-between-g-and-gcc指出:设计上,g++是c++的编译器,这点没错;而gcc作为"Gnu Compiler Collection",也同样可以做c++代码的编译链接工作,而事实上gcc是通过调用g++来完成工作的;但是默认情况下,所提供的参数方面,gcc和g++是不同的。

那么,这个所谓的参数不同,具体究竟是指的什么呢?其实是链接库的问题。默认情况下,gcc通过调用g++程序能够正确的按c++98标准编译c++代码,但是gcc并没有设定c++代码的默认链接库而导致链接错误。最简单的解决方案,其实就是告诉gcc,需要链接库stdc++,指令为

gcc -o [targer_binary] [source_file] -lstdc++

怎么样,链接错误是不是一次就解决了呢:)

posted on 2012-03-04 01:22  御剑风吟  阅读(365)  评论(0编辑  收藏  举报

导航