美文网首页
C链接1 -gcc编译命令

C链接1 -gcc编译命令

作者: ffusheng | 来源:发表于2017-05-04 20:20 被阅读0次

一个C程序最后生成可执行目标文件,会分阶段经过预处理, 编译, 链接的过程,而往往整个过程由IDE提供的编译驱动程序, 全权代表用户调用预处理器,编译器,汇编器和链接器。

预处理

// test.c
#include <stdio.h>
#define pai 3
// this is conment
int main()
{
    Element i = 10;
    Element result = pai * 3;
    printf("%d\n", result);
}
gcc -E test.cpp > test.i

-E 选项调用预处理器cpp, 默认是输出预处理后的信息至屏幕上, 所以需要重定向至文件, 打印test.i的信息是:

 ......还有头文件等信息已经省略
typedef int Element;
int main()
{
     Element i = 10;
     Element result = 3 * i;
     printf("%d\n", result);
}

发现其实预处理器在这里只干了3件事:

  • 去掉注释
  • 宏替换
  • 复制头文件

链接

链接器在软件开发中很重要, 正是因为它的, 使得分离编译成为可能.

  • main.c
#include <stdio.h>

extern num1;

int main()
{
    int num2 = 10;
    printf("%d + %d = %d\n", num1, num2, add(num1, num2));
}
  • foo.c
int num1 = 20;

int add(int num1, int num2)
{
    return num1 + num2;
}
gcc -c main.c -o main.o       生成可重定位目标文件main.o
gcc -c foo.c -o foo.o         生成可重定位目标文件foo.o
gcc  main.o foo.o -o a.out    链接多个可重定位目标文件生成可执行目标文件

整个过程如图所示:


静态链接.jpg

从以上过程可以明白链接器的主要作用是链接多个目标文件成为一个可执行文件。

附 gcc编译命令

// test.c
#include <stdio.h>
int main(int argc, char **argv)
{
    printf("hello world\n");
}
  • 预处理
gcc -E test.c -o test.i
  • 编译生成汇编代码
gcc -S test.i -o test.s
  • 汇编器生成可重定位目标文件
gcc -c test.s -o test.o
  • 链接器生成可执行目标文件
gcc test.o -o test.out
  • 显示警告
gcc -Wall main.c -o a.out
  • 保留中间文件
gcc -save-temps main.c -o a.out
  • 链接动态库
gcc main.c -o c.out -l pthread
  • 定义宏
#include <stdio.h>

int main(int argc, char **argv)
{
    #ifdef MARCO
        printf("MARCO defined\n");
    #endif
}

gcc -DMARCO="hello" main.c
输出:MARCO defined

相关文章

  • C的编译过程

    预编译、编译、汇编、链接 a、预编译将.c 文件转化成 .i文件使用的gcc命令是:gcc –E对应于预处理命令c...

  • C链接1 -gcc编译命令

    一个C程序最后生成可执行目标文件,会分阶段经过预处理, 编译, 链接的过程,而往往整个过程由IDE提供的编译驱动程...

  • Linux C 编程基础

    1、gcc编译过程 基本命令: 2、编译文件 3、静态链接库 (1) 首先用-c编译各个单源文件.c生成.o文件 ...

  • 程序员自我修养2-编译与链接

    上术过程分解为4个步骤:预处理、编译、汇编、链接1、预编译命令:处理‘#’命令gcc -E hello.c -o ...

  • 1.准备

    gcc使用 1.gcc编译流程:1)预处理:gcc -E2)编译:gcc -S3)汇编:gcc -c4)链接:没参...

  • CentOS6.5安装Nginx

    1.编译依赖 gcc 环境,如果没有 gcc 环境,需要安装 gcc 命令:yum install gcc-c++...

  • GCC相关编译命令

    编译链接的过程命令 gcc -E hello.c -o hello.i 预处理 gcc -S hello.i -o...

  • CentOS6.5安装FastDFS

    1.安装gcc(c语言开发,需要使用gcc编译) 命令:yum install make cmake gcc gc...

  • GDB详解

    gcc常见命令 1.gcc -E source_file.c -E,只执行到预编译。直接输出预编译结果。 2. g...

  • GDB详解

    gcc常见命令 1.gcc -E source_file.c -E,只执行到预编译。直接输出预编译结果。 2. g...

网友评论

      本文标题:C链接1 -gcc编译命令

      本文链接:https://www.haomeiwen.com/subject/pkedtxtx.html