博客
关于我
Linux——gcc编译器
阅读量:787 次
发布时间:2023-02-02

本文共 960 字,大约阅读时间需要 3 分钟。

Linux中的gcc编译器

了解编译器

在Linux系统中,gcc(GNU C Compiler)是主要的C/程序编译器,支持C和C++(通过g++)。了解这些编译器的工作原理,有助于更好地理解程序的编译过程。

程序的翻译过程

程序从源代码到可执行文件的转换过程通常包括以下几个阶段:

  • 预处理

    • 展开包含的头文件。
    • 删除注释。
    • 处理条件编译和宏。
  • 编译

    • 将预处理后的代码翻译成汇编指令(生成汇编代码)。
  • 汇编

    • 将汇编指令翻译成机器码(生成可重定位二进制文件)。
  • 链接

    • 根据代码引用合并成最终的可执行文件。
  • 接下来,我们用具体实例了解这些阶段。

    使用gcc的实际操作

    1. 预处理阶段

    编写一个简单的C程序:

    #include 
    int main() { printf("Hello, World!"); return 0;}

    使用gcc进行预处理:

    gcc -E code.c -o code.i
    • -E 选项是预处理后缀。
    • 预处理后文件名后缀为.i

    打开code.i查看预处理结果:

    2. 编译阶段

    将预处理的文件进行编译:

    gcc -S code.i -o code.s
    • -S 选项生成汇编代码,文件名后缀为.s

    3. 汇编阶段

    将汇编代码翻译成机器码:

    gcc -c code.s -o code.o
    • -c 选项是编译成可执行文件,文件名后缀为.o

    查看或运行编译后的文件:

    4. 链接阶段

    将所有编译结果链接成可执行文件:

    gcc -o mybin code.o
    • 默认使用动态链接,将结果保存为mybin

    查看可执行文件:

    动态链接与静态链接

    • 动态链接:通过共享库文件,减少应用程序的体积。
    • 静态链接:直接将库文件嵌入可执行文件。

    使用静态链接选项:

    gcc -static code.o -o staticbin
    • 使用static选项。

    安装静态库:

    sudo yum install -y glibc-static

    查看静态和动态库:

    ls /lib64/libc.a  # 查看静态库ls /lib64/libc.so.6 # 查看动态库

    了解编译器工作流程有助于更好地控制代码优化和错误调试。

    新加入的关键词:

    • 编译器工作流程
    • glibc静态库安装
    • 静态与动态链接优缺点

    转载地址:http://bkzfk.baihongyu.com/

    你可能感兴趣的文章
    linux下tar打包与压缩
    查看>>
    Linux下Tomcat的启动、关闭、杀死进程
    查看>>
    Linux下Tomcat重新启动
    查看>>
    LInux下Ubuntu下查看端口占用及关闭
    查看>>
    Linux下Unicode的使用
    查看>>
    linux下uniq命令
    查看>>
    linux下vim命令详解
    查看>>
    linux下vi命令着色
    查看>>
    linux下vi编辑器使用方法
    查看>>
    linux下vi编辑某文件时,操作出现 错误提示: E325: ATTENTION 2, Found a swap file by the name ".p1.c.swp"...
    查看>>
    linux下vsode超级用户运行
    查看>>
    linux下xargs命令用法
    查看>>
    Linux下以C构建WEB服务并响应XHR(XMLHttpRequest)请求
    查看>>
    linux下使用gdb调试程序
    查看>>
    linux下使用logrotate切割nginx日志
    查看>>
    Linux下使用popen()执行shell命令
    查看>>
    linux下使用source /etc/profile保存配置后,新的环境变量只能在一个终端里面有效...
    查看>>
    linux下使用zsign签名
    查看>>
    Linux下修改Apache根目录
    查看>>
    Linux下几种文件传输命令 sz rz sftp scp
    查看>>