gcc/g++

Introduction

  • IL 都是用来指定搜索路径的选项,但它们的作用完全不同,分别用于 编译阶段链接阶段

主要区别

选项 用途 作用阶段 搜索内容
-I 指定头文件搜索路径 编译阶段 .h(头文件)
-L 指定库文件搜索路径 链接阶段 .so / .a(库)

具体解释

1. I(Include Path)

  • 功能:告诉编译器在指定的目录中查找头文件。

  • 使用场景

    • 头文件不在标准目录(如 /usr/include)中时。
    • 项目中有自定义的 include/ 目录。
  • 生效阶段编译阶段,即将源代码(.c / .cpp)转换为目标文件(.o)。

  • 示例

    1
    2
    gcc -Iinclude -c src/main.c -o build/main.o

    • Iinclude:从 include/ 目录中查找头文件。
    • 头文件的查找顺序:
      1. #include "header.h":先查找当前目录,再查找 I 指定目录。
      2. #include <header.h>:直接查找标准目录和 I 指定目录。

2. L(Library Path)

  • 功能:告诉链接器在指定的目录中查找库文件(.so.a)。

  • 使用场景

    • 链接阶段需要引用非系统目录中的库。
    • 第三方库安装在自定义目录中。
  • 生效阶段链接阶段,即将目标文件(.o)组合为可执行文件。

  • 示例

    1
    2
    gcc -Llib -lmylib -o myprogram build/main.o

    • Llib:从 lib/ 目录中查找 libmylib.solibmylib.a
    • lmylib:指定链接库 libmylib

配合使用 IL

在实际开发中,-I-L 经常一起使用:

1
2
gcc -Iinclude -Llib -lmylib -o myprogram src/main.c

  1. Iinclude
    • 编译器在 include/ 中查找头文件 myheader.h
  2. Llib
    • 链接器在 lib/ 中查找库文件 libmylib.solibmylib.a
  3. lmylib
    • 指定链接 libmylib

总结

  1. IL 的不同点
    • I:解决的是头文件的查找问题,编译阶段生效。
    • L:解决的是库文件的查找问题,链接阶段生效。
  2. 配合使用
    • IL 常搭配使用,因为库的头文件和库文件通常存放在不同的目录下,分别需要两个选项来指定路径。
  3. 记忆小技巧
    • I → Include → 头文件路径。
    • L → Library → 库文件路径。

gcc/g++
https://williammarioalan.github.io/2025/01/30/gcc-g/
Author
mario
Posted on
January 30, 2025
Licensed under