我们误以为gcc只能用来编译C文件,这是不对的。
gcc也可以编译C++文件,只是gcc不能自动联接C++程序使用的库,即链接过程我们不能用gcc
而g++实际上在编译C++文件时也是使用gcc编译器,在链接时才使用g++
例子1:
#include <stdio.h>
template<class T>
T max(T a, T b)
{
return a>b?a:b;
}
int main()
{
int a,b;
a = 5;
b = 3;
printf("max=%d\n", max(a,b));
return 0;
}
我们将其保存为test.cpp
在这里中,我们选择了C++中有而C没有的类模板来做实例,更具有说服力。
接着用gcc编译,输入命令gcc test.cpp -o test
没有错误,输入./test 运行
结果输出max=5,可以验证以上说法
例子2:
#include <iostream>
using namespace std;
int main()
{
cout << "link test" << endl;
return 0;
}
这里我们使用了常规操作,只是使用的库文件不是标准的C库文件,而是C++的iostream
我们使用命令gcc test.cpp -o test生成可执行文件,可以看到出现了错误
接着我们使用命令gcc -c test.cpp,这样我们对代码只进行编译而不进行链接,命令执行后,没有提示错误,并且可以看到当前目录下出现了test.o
然后我们进行链接gcc test.o -o test,发现出现了和之前一样的错误,说明gcc不能自动联接C++程序的库
那么我们使用命令gcc test.o -o test -lstdc++ 联接C++的库,就会发现链接已经没问题,目录下出现了test文件
运行一下,显示link test,表示试验成功
这里注意-lstdc++要放在后面,因为编译器是从右向左调用和处理变量的,如果我们使用gcc -lstdc++ test.o -o test的话,错误还是会存在的
(网上说gcc -lstdc++ test.cpp -o test也可以,那大概是gcc的版本不一样的问题)
————————————————————
本次测试环境:
虚拟机Ubuntu12.04,内核版本3.2.0
gcc version 4.6.3