博客
关于我
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 中 Grep 命令的常见示例
    查看>>
    Linux 中如何避免 rm -rf /*
    查看>>
    Linux 中文打字软件 gtypist 光标错位解决
    查看>>
    linux 中文显示乱码解决办法
    查看>>
    linux 中文游戏网站,5款值得推荐的免费游戏
    查看>>
    Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
    查看>>
    Linux 中的 /dev/random 和 /dev/urandom 是什么?
    查看>>
    Linux 中的 15 个强大的 firewall-cmd 命令
    查看>>
    Linux 中的 bc 命令:用于精度计算的利器
    查看>>
    Linux 中的 Nslookup 命令怎么使用?
    查看>>
    Linux 中的 Umask 是什么?
    查看>>
    Linux 中的 utmp、wtmp 和 btmp 文件是什么?
    查看>>
    Linux 中的 文件系统表Fstab 是什么?
    查看>>
    linux 中的.so和.a文件
    查看>>
    Linux 中的密码生成器:如何在命令行中生成随机密码
    查看>>
    Linux 中的机器学习:Whisper——自动语音识别系统
    查看>>
    Linux 中的管道(Pipeline)和使用场景
    查看>>
    Linux 中的绝对路径与相对路径:有什么区别?
    查看>>
    Linux 中的逻辑卷 LVM 管理完整初学者指南
    查看>>
    Linux 使用ab进行压力测试
    查看>>