• Linux系统编程4_编译链接


    编译代码的步骤:

    预处理器:源代码经过预处理器处理后变成了修改后的源代码,主要是处理#符号开头的特殊行;
    编译器: 编译修改后的源代码,将翻译后的机器语言指令,也就是目标代码,存储在目标文件中;
    目标文件:不是完整的程序,因为它不包含一些必要的运行时库,所以无法执行;
    运行时库:执行一些常规操作或者某些困难任务预先编写好的代码库;具有广泛性,程序难免要用到它的一部分;
    链接器:将目标文件与必须的运行时库结合,会创建可执行文件;
    可执行文件:包含机器语言指令或可执行代码,已经可以在计算机上运行;

    许多IDE实际上集成了上述功能, 只需要单击一个按钮,或从菜单中选择一个菜单项即可完成预处理,编译,链接,甚至执行程序;

    命令行模式下编译C语言程序,这样能够了解生成一个可执行程序的详细步骤,以及编译命令的各种设置选项,为以后的 Linux C/C++ 开发打好坚实的基础。

    GCC 仅仅是一个编译器,没有界面,必须在命令行模式下使用。通过gcc命令就可以将源文件编译成可执行文件。

    Linux 不以文件后缀来区分可执行文件,Linux 下的可执行文件后缀理论上可以是任意的,
    这里的.out只是用来表明它是 GCC 的输出文件。不管源文件的名字是什么,GCC 生成的可执行文件的默认名字始终是a.out。

    如果不想使用默认的文件名,那么可以通过-o选项来自定义文件名
    gcc main.c -o main.out
    因为 Linux 下可执行文件的后缀仅仅是一种形式上的,所以可执行文件也可以不带后缀
    gcc main.c -o main



    后缀说明:

    .o //编译的目标文件,对应于windows的.obj文件
    .so //动态链接库(共享库),是shared object,用于动态连接的,对应于windows的.dll
    .a //静态库,对应于windows的.lib
    .c .cpp .h //源文件,头文件
    .out //只是一种形式上的后缀
    .sh
    .conf



    1、编译
    gcc -c main.c
    一个源文件会生成一个目标文件,多个源文件会生成多个目标文件,源文件数目和目标文件数目是一样的。
    通常情况下,默认的目标文件名字和源文件名字是一样的。
    如果希望自定义目标文件的名字,那么可以使用-o选项
    gcc -c main.c -o a.o

    2、链接
    gcc main.o //gcc命令后面紧跟目标文件的名字,就可以将目标文件链接成为可执行文件;
    //而且会自动识别到底是源文件还是目标文件;
    //如果是源文件,要经过编译,链接两个步骤才能生成可执行文件;
    //如果是目标文件,只需要链接就可以了;



    源文件的后缀名,只是为了表明该文件中保存的是某种语言的代码;

    工程/项目 ->为当前程序配备的专用文件夹;

    程序分类
    不带界面的 ->控制台程序
    带界面,用鼠标点击 ->GUI程序
    不单独出现的,只作为其他程序的一个组成部分->静态库,动态库

    源代码经过编译(Compile),链接(Link)两个过程才能变成可执行文件
    编译器一次只能编译一个源文件,如果包含了多个源文件,也需要多次编译,每次编译的结果是产生一个中间文件;
    当程序的所有中间文件以及系统库(或者理解为系统中的一些组件)组合在一起时,才能形成最终的可执行文件。
    这个组合的过程叫做链接;完成链接功能的软件叫做链接器
    即便编译后的程序可能只有一个中间文件,不再需要和其他中间文件结合了,但是还需要和一些系统库组合。这个过程也是链接;

  • 相关阅读:
    【特别推荐】12款最佳的网站速度和性能测试工具
    Skeljs – 用于构建响应式网站的前端开发框架
    EpicEditor – 可嵌入的 JavaScript Markdown 编辑器
    12个学习 CSS3 网站布局设计的优秀案例
    15套流行的扁平化设计的界面素材【免费下载】
    JavaScriptOO.com – 快速找到你需要的 JS 框架
    15款最好的 jQuery Modal(模态窗口)插件
    开眼了!20个极具创意的移动界面动画效果
    ShareDrop – 苹果 AirDrop 服务的 HTML5 实现
    Furatto – 轻量,友好的响应式前端开发框架
  • 原文地址:https://www.cnblogs.com/grooovvve/p/13352515.html
Copyright © 2020-2023  润新知