linux下gcc/g++ 使用

简介:

gcc 与 g++ 分别是 gnu 的 c & c++ 编译器 ,gcc是c编译器,g++是c++编译器,C语言可以用gcc和g++生成可执行文件,c++只能用g++生成可执行文件。

编译器在执行编译时,总共需要4步:

  1. 预处理,生成 .i 的文件 [预处理器cpp]
  2. 将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]
  3. 有汇编变为目标代码(机器代码)生成 .o 的文件 [汇编器as]
  4. 连接目标代码, 生成可执行程序 [链接器ld]

gcc/g++常用的参数:

假设源文件名为hello.c

如果不加参数则输出a.out的可执行文件:

gcc hello.c

-o
制定目标名称,默认的时候,gcc编译出来的文件是a.out:

gcc hello.c -o hello

-E
只激活预处理,这个不生成文件:

gcc -E hello.c

后面跟-o可以输出文件:

gcc -E hello.c -o hello.i

-S
只激活预处理和编译,就是指把文件编译成为汇编代码:

gcc -S hello.c
#或
gcc -S hello.i

-c
只激活预处理,编译,和汇编,也就是他只把程序做成obj文件:

gcc -c hello.c 

单个源文件生成可执行程序:

假设有一个名为 helloworld.cpp 的c++源文件:

#include <iostream>
int main()
{
    std::cout << "hello, world" << std::endl;
    return(0);
}

运行如下命令生成 helloworld 可执行文件:

g++ helloworld.cpp -o helloworld

运行该文件:

./helloworld
#输出  hello,world

程序 g++ 是将 gcc 默认语言设为 C++ 的一个特殊的版本,链接时它自动使用 C++ 标准库而不用 C 标准库。通过遵循源码的命名规范并指定对应库的名字,用 gcc 来编译链接 C++ 程序是可行的,如下例所示:

gcc helloworld.cpp -lstdc++ -o helloworld

选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libstdc++.a。而后它在标准库路径中查找该库。gcc 的编译过程和输出文件与 g++ 是完全相同的。

在大多数系统中,GCC 安装时会安装一名为 c++ 的程序。如果被安装,它和 g++ 是等同,如下例所示,用法也一致:

c++ helloworld.cpp -o helloworld

多个源文件生成可执行文件

假设有以下三个文件,一个头文件和两个源文件:

/* speak.h */
#include <iostream>
class Speak
{
    public:
        void sayHello(const char *);
};
/* speak.cpp */
#include "speak.h"
void Speak::sayHello(const char *str)
{
    std::cout << "Hello " << str << "\n";
}
/* hellospeak.cpp */
#include "speak.h"
int main(int argc,char *argv[])
{
    Speak speak;
    speak.sayHello("world");
    return(0);
}

如果将多个源文件在g++ 中指定,则它们将被编译链接成一个可执行文件:

 g++ hellospeak.cpp speak.cpp -o hellospeak

我们也可以将以上两个文件分别生成目标文件在链接成可执行文件:

g++ -c hellospeak.cpp 
g++ -c speak.cpp 
g++ hellospeak.o speak.o -o hellospeak

参考:

[1].GCC 参数详解
[2].Linux 环境下使用g++编译C++

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值