精华内容
下载资源
问答
  • gcc生成linux可执行文件
    千次阅读
    2022-03-14 10:30:59

    编译器:GCC
    预处理:头函数的包含,去掉注释,宏展开
    gcc -E helloworld.c -o helloworld.i;
    编译:编译过程做语法检查,生成汇编文件
    gcc -S helloworld.i -o helloworld.s;
    汇编:将汇编语言生成对应的二进制文件。
    gcc -c helloworld.o -o helloworld.o;
    链接:添加对应的操作系统链接库生产可执行文件。
    gcc helloworld.o -o helloworld;

    更多相关内容
  • Linuxgcc编译c文件为可执行文件分为四个步骤: 分别是 预编译、编译、汇编、链接。 1、预编译( 生成 hello.i 文件) 预编译的处理规则: 1. 将所有的 “#define” 删除,并展开所有的宏定义。 2. 处理...

    Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译、编译、汇编、链接。

    1、预编译( 生成 hello.i 文件) 

    预编译的处理规则:

            1. 将所有的 “#define” 删除,并展开所有的宏定义。
            2. 处理所有的条件预编译指令,比如:" #if #ifdef #elif #else #endif "。
            3. 处理所有的 “#include” 预编译指令。
            4. 删除所有的注释 “//” 、 “/* */”。
            5. 添加行号和文件名标识,以便编译时产生的行号信息以及用于编译错误或警告时能够显示行号。
            6. 保留所有的 “#pragma” 编译器指令。

    $ gcc -E hello.c -o hello.i 或者 $ gcc  hello.c > hello.i

    2、编译(生成汇编代码 hello.s) 

            编译过程是编译器gcc把预处理完的文件进行词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。

    编译过程可以使用如下命令:

    $ gcc -S hello.i -o hello.s 或者 $ gcc -S hello.c -o hello.s

    都可以得到汇编输出文件 hello.s

    3、汇编(生成hello.o文件)


            汇编是 汇编器as 把汇编代码转变成中间目标文件。
            汇编过程可以使用如下命令:

     $ gcc -c hello.s -o hello.o 或者 $ gcc -S hello.c -o hello.o

    可以得到中间目标文件

    4、链接(生成可执行程序)


            链接器 ld:负责将程序的目标文件与所需的所有附加的目标文件连接起来,附加的目标文件包括静态连接库和动态连接库。

            链接是链接器ld把中间目标文件和相应的库一起链接成为可执行文件。

    $ gcc hello.o -o hello

         

       如果前面使用的是$ gcc hello.c命令,默认会产生一个a.out 的可执行文件,使用命令./a.out执行改可执行文件。

    注:上述步骤可以放在一起执行

    $ gcc hello.c -o hello
    ./hello
    展开全文
  • gcc/g++中的生成可执行文件步骤

    千次阅读 2022-04-04 21:15:59
    在编译过程中,除非使用了-E、-S、-C选项(或者编译出错阻止了完整的编译过程)否则最后的步骤都是链接生成到最后的可执行文件。 比如: gcc hello.c 他会输出一个默认的可执行程序 a.out,然后我们直接调用 ./a.out...

    步骤

    生成可以执行文件需要四个步骤:
    预处理——编译——汇编——链接

    在编译过程中,除非使用了-E、-S、-C选项(或者编译出错阻止了完整的编译过程)否则最后的步骤都是链接生成到最后的可执行文件。
    比如:
    gcc hello.c
    他会输出一个默认的可执行程序 a.out,然后我们直接调用 ./a.out 来执行该应用程序。

    下面我们逐步来看一下每一步都在做什么以及生成什么文件。

    例子

    我们用一个简单的例子来说明

    #include<stdio.h>
    
    #define   MAX  20 
    #define   MIN  10 
    
    int main()
    {
    	printf("this is a compile sample\n");
    	printf("MAX = %d,MIN = %d,MAX + MIN = %d\n",MAX,MIN,MAX + MIN); 
    
    	return 0;
    }
    
    

    这里我们可以一步生成可执行文件
    gcc test.c
    会生成默认可执行文件a.out

    预处理 -E

    作用:处理宏定义和include,去除注释,不会对语法进行检查,生成.i文件

    命令:
    gcc -E test.c -o test.i
    我们预处理后生成test.i文件
    我们打开test.i文件发现有很多东西,最下面出现的是
    在这里插入图片描述
    我们看到他将宏直接展开成数字,而宏定义已经没了

    编译 -S

    作用:检查语法,生成汇编指令, .s文件。

    命令:
    gcc -s test.c -o test.s
    在这里插入图片描述
    可以看到生成的是汇编代码

    汇编 -C

    作用: 翻译成符合一定格式的机器代码, 生成.o文件。
    命令
    gcc -c test.c -o test.o

    .o:object file(OBJ文件) 这里表现为二进制目标文件:
    在这里插入图片描述

    mac下生成的是mac目标文件
    在这里插入图片描述
    Linux下生成的是ELF目标文件
    在这里插入图片描述

    链接 -O

    作用:链接就是将汇编生成的OBJ文件、系统库的OBJ文件、库文件链接起来,最终生成可以在特定平台运行的可执行程序。

    gcc -o test test.c
    在这里插入图片描述
    这里我们生成的test就是一个可执行程序。-o是指定生成的可执行文件名称。他把前面几步都默认执行了。

    在编译过程中,除非使用了-E、-S、-C选项(或者编译出错阻止了完整的编译过程)否则最后的步骤都是链接生成到最后的可执行文件。
    所以一般我们都是直接执行-o选项生成可执行文件

    总结

    一般我们其实不用关注前面三步,预处理——编译——汇编。因为这三步我们不需要去干预什么,都是机器自动检查错误或者生成一些东西。而最后一步链接的是链接一些库,这个就有我们可以操作的东西了,比如说我们指定一些可以连接的动态库,包括我们自己制作一些库放到给别人链接。这个我会在下一篇文章详细讲一下。

    展开全文
  • Linuxgcc编译c程序生成可执行文件的过程

    万次阅读 多人点赞 2018-10-23 11:29:42
    Linuxgcc编译c文件生成可执行文件 一、准备 hello.c 文件 1、在当前目录下新建c文件 $:vim hello.c 2、按i进入编辑模式。按esc退出编辑模式,输入源代码 #include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt...

    Linux下gcc编译c程序生成可执行文件

    一、准备 hello.c 文件

    1、在当前目录下新建c文件

    $:vim hello.c

    2、按i进入编辑模式。按esc退出编辑模式,输入源代码

    #include <stdio.h>
    int main(void)
    {
    printf("hello world");
    return 0;
    }
    

    退出编辑模式,按住shift+两次z退出(命令行模式下,或者在底行模式下wq)

    二、四个步骤

    Linux下gcc编译c文件为可执行文件分为四个步骤: 分别是 预编译、编译、汇编、链接

    1、预编译( 生成 hello.i 文件)

    预编译器cpp 把源代码文件和相关的头文件(如stdio.h)预编译成一个 .i 文件

    预编译的过程相当于

    $ gcc -E hello.c -o hello.i 或者 $ gcc  hello.c > hello.i
    

    预编译的处理规则:

    1. 将所有的 “#define” 删除,并展开所有的宏定义
    2. 处理所有的条件预编译指令,比如:" #if #ifdef #elif #else #endif "
    3. 处理所有的 “#include” 预编译指令
    4. 删除所有的注释 “//” 、 “/* */”
    5. 添加行号和文件名标识,以便编译时产生的行号信息以及用于编译错误或警告时能够显示行号
    6. 保留所有的 “#pragma” 编译器指令

    2、编译(生成汇编代码 hello.s)

    编译过程是编译器gcc把预处理完的文件进行词法分析、语法分析、语义分析及优化后生成相应的汇编代码文件。

    编译过程可以使用如下命令:

    $ gcc -S hello.i -o hello.s 或者 $ gcc -S hello.c -o hello.s
    

    都可以得到汇编输出文件 hello.s

    3、汇编(生成hello.o文件)

    汇编是 汇编器as 把汇编代码转变成中间目标文件。
    汇编过程可以使用如下命令:

    $ gcc -c hello.s -o hello.o 或者 $ gcc -S hello.c -o hello.o
    

    可以得到中间目标文件

    4、链接(生成可执行程序)

    链接器 ld:负责将程序的目标文件与所需的所有附加的目标文件连接起来,附加的目标文件包括静态连接库和动态连接库

    链接是链接器ld把中间目标文件和相应的库一起链接成为可执行文件。

    $ gcc hello.o -o hello
    

    如果前面使用的是$ gcc hello.c命令,默认会产生一个a.out 的可执行文件,使用命令./a.out执行改可执行文件
    如果前面使用的是 g c c − o t e s t h e l l o . c 命 令 , 会 产 生 一 个 t e s t 的 可 执 行 文 件 , 使 用 命 令 gcc -o test hello.c命令,会产生一个test的可执行文件,使用命令 gccotesthello.ctest使 ./test执行该文件,上述两种方法效果是一样的。
    在这里插入图片描述

    运行可执行文件

    ./hello
    

    注:上述步骤可以放在一起执行

    $ gcc hello.c -o hello
    ./hello

    参考文章

    [1]. https://blog.csdn.net/chengzi_comm/article/details/45932417
    [2]. https://www.cnblogs.com/judes/p/6999917.html
    [3]. https://blog.csdn.net/yeruby/article/details/39450627

    展开全文
  • gcc -S main.i -o main.s 当然,你也可以使用gcc -S main.c -o main.s直接生成汇编文件.s 3. 汇编 汇编器就是将汇编文件代码转变成机器可以执行的指令,每一个汇编语句几乎对应一条机器指令,所以汇编器的汇编...
  • 1.gcc是GNU Compiler Collection(就是GNU编译器套件),也可以简单认为是编译器,它可以编译很多种编程语言(括C、C++、Objective-C、Fortran、Java等等)。 2.当你的程序只有一个源文件时,直接就可以用gcc...
  • 本文分别通过链接静态库和动态库来编译可执行文件,在使用gcc编译的过程中了解链接静态库和动态库的区别与联系,同时深入理解Linux系统上是如何将源程序一步步的编译组装成可执行文件的。 目录(一)库文件(二)...
  • 首先在cygwin.com下载最新的cygwin.exe,这个...下面的两步骤是安装gcc编译器的其他的直接NEXT就行了,然后就是漫长的等待了,比较大安装完成以后就可以在windows下编译linux程序了,不过有些和linux指令有一点点的...
  • GCC原名为GNU C语言编译器(GNU C Compiler),只能对C语言...本文将带你迈入GCC的大门,了解一个C源文件是如何在GCC编译工具链的加工下成为一个可执行文件的,并详细讲解GCC编译参数以及可能会用到的其他知识。..
  • Linux(Ubuntu)下,生成C语言可执行文件和汇编文件前言一、一些Linux操作二、编写C语言文件三、生成可执行文件1. 正常过程2. 可能错误四、生成汇编文件五、生成反汇编文件总结 前言 在Linux(Ubuntu)下, 创建...
  • 我不认为有任何可靠的方法来做到这一点。... 为了理解差异,将GCC编译直接输出到汇编器( gcc -S )的输出与objdump在可执行文件( objdump -D )上的输出进行比较。我可以想到两个主要的并发症。 首先,由于指针偏...
  • 早期的Linux使用vi作为系统默认的编辑器,而Vim是vi的升级版,主要区别是Vim显示颜色,便于用户编辑,命令的使用差别不大。Vim有3种模式:一般模式、编辑模式和命令模式。(1)一般模式一般模式就是在终端输入vim命令...
  • 查看可执行文件,发现文件属性是shared library,而不是executable,导致这种情况的原因就是g++默认使用了-fpie参数。 什么是pie? PIE(position-independent executable)是一种生成地址无关可执行程序的技术。...
  • linux查看可执行文件的编译器版本

    千次阅读 2019-10-08 15:50:38
    一部分可执行程序,可以使用这个方法快速确认: strings -a browser360 | grep -i gcc 输出: ............... GCC: (Debian 4.8.4-1) 4.8.4 ...............
  • Linux系统下的gcc操作

    千次阅读 2022-03-21 21:45:53
    目录 一、一次性编译 1、新建、编辑源文件 2、生成可执行程序 ...在Linux上编译.c文件并非直接生成.out文件(Windows上为.exe),中间还经历了预处理、编译、汇编、链接四个过程,好在gcc提供了生成中间文...
  • Linux下,使用gcc/g++编译器编译c/c++代码,cpp文件经过预处理,编译,汇编,链接到可执行文件 下载安装gccLinux一般会自带gcc,如果没有就用rpm,yum,apt等包管理工具下一个,毫无难度。 O、gcc编译器: 1、...
  • Linux中的二进制可执行文件和脚本可执行文件及Shebang 二进制可执行文件 我们知道,一个C程序经过预处理、编译、汇编、链接就会得到一个二进制可执行文件,这种文件在Linux中叫做ELF文件。比如我们有一个C源代码...
  • 操作步骤:gcc -E hello.c -o hello.i 主要作用: 处理关于 “#” 的指令 【1】删除#define,展开所有宏定义。例#define portnumber 3333 【2】处理条件预编译 #if, #ifdef, #if, #elif,#endif 【3】处理“#...
  • gcc -o app test.c将生成可执行程序app 动态库*.so在linux下用c和c++编程时经常会碰到,最近在网站找了几篇文章介绍动态库的编译和链接,总算搞懂了这个之前一直不太了解得东东,这里做个笔记,也为其它正为动态库...
  • Linux生成可执行文件

    万次阅读 2019-01-06 21:58:51
    linux下c语言工程: c文件:主要每个模块的原代码都在c文件中。 h文件:每个c文件都跟着一个h文件,h文件的作用是放着...每个文件经过编译都会形成一个目标文件(二进制文件),多个目标文件链接后才能形成可执行...
  • gcc编译链接之Map文件分析

    千次阅读 2021-05-16 06:47:31
    最近在研究MiCO OS项目的时候,发现编译目录build下有一个xxxx.map文件,打开一看,感觉都是一些内存段和符号信息,由此想到应该是编译链接过程中输出的一些信息。之前没有接触过,今天就来学习一下map文件是个什么...
  • Linux编译以及库函数的生成 前言 上一节中,我们通过 一、 二、 1. 2. 总结
  • 其中问到一个问题,c++的源程序到生成可执行文件的过程。喵哥吞吞吐吐的答出了一部分。现在面完了,在网上找了下标准答案:预处理、编译、汇编、链接。 在Windows下,VC编译一个源程序都是一键完成,不知道过程,而...
  • linuxgcc编译生成.out,.o,.a,.so文件

    万次阅读 多人点赞 2020-03-31 18:31:26
    1、文件类型介绍 .out是可执行文件,相当于win上的exe; .o是编译中间目标文件,相当于win上的.obj;...2、out可执行文件生成 main.cpp #include <stdio.h> int main() { printf("hello wor...
  • 在当前目录下创建一个C源文件并打开: ...1)预处理 gcc-Etest.c-otest.i在当前目录下会多出一个预处理结果文件 test.i,打开 test.i 可以看到,在 test.c 的基础上把stdio.h和stdlib.h的内容插进去了。...
  • Linux GCC 调试

    2021-05-13 20:24:39
    安装Wgetwget --version (显示相关信息,查看是否已经安装)未安装:yum -y install wgetsecond: 安装gccyum install gccthird:安装 gdbyum install gdbAt last: 自由选择安装 makeyum install make开发过程image.png...
  • 简 述: 继 上一篇。...文章目录编程环境:动态库概念:前期铺垫:将.cpp文件生成.o文件:将.o文件大包为.so文件:调用.so文件:设置.so的运行时的PATH:解决 Linux 加载动态库 .so 文件失败的...
  • C/C++程序编译步骤 如何生成可执行文件电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出...
  • linux下编译c文件成为可执行文件的实例和详细过程

    万次阅读 多人点赞 2019-06-18 13:49:10
    三、执行 四、编译的四个步骤 一、准备C文件 在命令行模式下输入:vim hello.c 进入编辑模式,输入以下代码: #include<stdio.h> int main(void){ printf("Hello World!\n"); return 0; } 首先点击...
  • 使用gcc和g++编译一个可执行程序

    千次阅读 2022-01-24 10:41:54
    在前面的文章中已经介绍了安装gcc交叉编译工具链 交叉编译工具链 现在进行一个简单的编译操作 1.在服务器或者ubuntu虚拟机中创建一个a.c文件 输入以下程序: #include <...生成可执行文件时不加-o选项

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 115,552
精华内容 46,220
热门标签
关键字:

gcc生成linux可执行文件