用gcc编译C++文件

来源:互联网 发布:java短信发送验证代码 编辑:程序博客网 时间:2024/06/01 15:54

我们误以为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



0 0