gcc 的使用
发布日期:2021-05-07 21:03:45 浏览次数:22 分类:精选文章

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

GCC 编译器详解

一、GCC 编译过程

GCC 编译器是 Linux 下默认的 C/C++ 编译器,广泛应用于开发高性能程序。以下是 GCC 编译过程的详细步骤:

  • 预处理(-E)

    GCC 在编译前会执行预处理步骤,展开宏、包含头文件等操作。

  • 编译(-c)

    预处理完成后,GCC 会将源代码转化为汇编语言文件(.i)。

  • 汇编(-c)

    汇编语言文件经过汇编后,生成目标文件(.o)。

  • 链接

    最终,GCC 会将多个目标文件和库文件链接到一个可执行文件中。


  • 生成可执行文件

    gcc -E hello.c -o hello.igcc -S hello.i -o hello.sgcc -c hello.s -o hello.o# 链接,生成可执行文件gcc hello.s -o hello

    一次性生成可执行文件

    gcc hello.c -o hello

    二、GCC 编译选项

    1. -o 生成目标文件

    指定编译输出文件的名称和类型。例如:gcc -o hello hello.c

    2. -c 生成编译结果

    跳过链接步骤,直接生成可执行文件。例如:gcc -c hello.c -o hello.o

    3. -E 预处理

    仅执行预处理步骤,不生成汇编文件。例如:gcc -E hello.c

    4. -S 汇编

    生成汇编语言文件。例如:gcc -S hello.c -o hello.s

    5. -Wall 编译警告

    打开所有编译警告。默认情况下启用。

    6. -g 调试信息

    嵌入调试信息,支持后续使用 gdb 调试。例如:gcc -g -o hello hello.c

    7. -l 链接库

    指定要链接的库文件。例如:gcc -lmath hello.c -o hello

    8. -L 银行路径

    指定库文件所在目录。例如:gcc -L/usr/lib -lmath hello.c -o hello

    9. -I 头文件路径

    添加头文件搜索路径。例如:gcc -Iinclude -o hello hello.c

    10. -D 预定义宏

    定义预定义宏。例如:gcc -DDEBUG hello.c -o hello

    11. -O 优化

    优化编译结果。默认为 -O0,无优化;-O2 为常用优化级别。

    12. -shared 生成共享库

    将程序编译为共享库。例如:gcc -shared -fPIC -o libFun.so fun.c

    13. -fPIC 位置无关代码

    生成与内存位置无关的代码,便于共享库。与 -shared 通常配合使用。


    三、多模块编译

    一次性编译

    gcc -Wall fun.c main_fun.c -o main_fun

    独立编译

    gcc -Wall -c main_fun.c -o main_fun.ogcc -Wall -c fun.c -o fun.ogcc -Wall main_fun.o fun.o -o main_fun

    四、静态库(.a)

    生成静态库

    gcc -c fun.c -o fun.oar rcs libfun.a fun.o

    使用静态库

    gcc -Wall main.c -o main -L. -lfun

    静态库搜索路径

  • 使用 -L 指定目录
  • 设置环境变量 LIBRARY_PATH
  • 将库文件放入系统标准目录(如 /usr/lib

  • 五、共享库(.so或.sa)

    生成共享库

    gcc -shared -fPIC fun.c -o libFun.so

    使用共享库

    gcc -Wall main.o -o main -L. -lFun

    共享库配置

  • .so 放在共享目录(如 /usr/lib
  • 设置 LD_LIBRARY_PATH
  • 配置 /etc/ld.so.conf 并运行 ldconfig

  • 通过以上命令,您可以高效地使用 GCC 编译器进行开发。

    上一篇:使用 GNU Libtool 创建库
    下一篇:变量在configure.ac,makefile.am,makefile,config.h中的传递

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月17日 16时20分36秒