gcc编译器用法linux,gcc编译器用法

一个用c语言写的程序把他编译成计算机可执行的文件,一般有4个步骤

/*================================================================

* Copyright (C) 2018 . All rights reserved.

*

* 文件名称:helloworld.c

* 创 建 者:ghostwu(吴华)

* 描 述:gcc编译器用法演示

*

================================================================*/

#include

#define HELLO "hello world!\n"

int main(int argc, char *argv[])

{

printf( HELLO );

return 0;

}

1,预处理:这个步骤,主要是包含头文件,展开宏定义

gcc -E helloworld.c -o helloworld.i

2,生成汇编代码

gcc -S helloworld.i -o helloworld.s

3,编译汇编

gcc -c helloworld.s -o helloworld.o

4,链接

gcc helloworld.o -o helloworld

通常写完程序,我们用 gcc helloworld.c -o helloworld 直接完成以上四个步骤

gcc常用选项含义:

1. -o output_filename

确定可执行文件的名称为output_filename。如果不给出这个选项,gcc就给出预设的可执行文件名a.out。

2. -c

只编译,不链接成为可执行文件,编译器只是由输入的.c等源文件生成.o为后缀的目标文件。

3. -g

产生调试工具(gdb)所必要的符号信息,要想对编译出的程序进行调试,就必须加入这个选项。

4. -ldirname

将dirname所指出的目录加入到程序头文件目录列表中。

5. -Ldirname

将dirname所指出的目录加入到库文件的目录列表中。

6. -Wall

生成所有警告信息。

gcc编译多个模块

helloworld.h

1 ==============================================================

2 * Copyright (C) 2018 . All rights reserved.

3 *

4 * 文件名称:helloworld.h

5 * 创 建 者:ghostwu(吴华)

6 * 描 述:

7 *

8 ================================================================*/

9

10 #ifndef _HELLO_H_

11 #define _HELLO_H_

12 void say_hello( const char* name );

13 #endif

helloworld.c

/*================================================================

* Copyright (C) 2018 . All rights reserved.

*

* 文件名称:helloworld.c

* 创 建 者:ghostwu(吴华)

*

================================================================*/

#include

#include "helloworld.h"

void say_hello( const char* name ) {

printf( "%s\n", name );

}

main.c

/*================================================================

* Copyright (C) 2018 . All rights reserved.

*

* 文件名称:main.c

* 创 建 者:ghostwu(吴华)

* 描 述:

*

================================================================*/

#include "helloworld.h"

int main(int argc, char *argv[])

{

say_hello( "hello ghostwu" );

return 0;

}

编译命令:

gcc helloworld.c main.c -o hello

打包静态库(就是一堆通用函数的集合,用.o文件打包):

1,首先生成.o文件

gcc -c helloworld.c -o helloworld.o

2,ar rcs libhello.a helloworld.o

r:替换  c:创建 s:保存

把helloworld打包成 libhello.a静态库

3,用静态库编译 生成 可执行文件

gcc -Wall main.c libhello.a -o main

也可以使用l和L 选项

小写的l: 指定库文件名

大写的L: 指定库所在的路径

gcc -Wall main.c -o main2 -lhello( 这种方式会报错,在链接库的时候,没有用L指定路径,默认情况下 不会在当前目录查找静态库 )

gcc -Wall -L. main.c -o main2 -lhello( L后面跟个. 代表当前目录下查找所链接的库(libhello.so) ), -lhello: 省略lib和后缀(.so)

这个时候删除静态库libhello.so,生成的main和main2文件,依然能执行,因为静态库已经被包含在可执行文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值