gcc/g++
Introduction
I和L都是用来指定搜索路径的选项,但它们的作用完全不同,分别用于 编译阶段 和 链接阶段。
主要区别
| 选项 | 用途 | 作用阶段 | 搜索内容 |
|---|---|---|---|
-I |
指定头文件搜索路径 | 编译阶段 | .h(头文件) |
-L |
指定库文件搜索路径 | 链接阶段 | .so / .a(库) |
具体解释
1. I(Include Path)
功能:告诉编译器在指定的目录中查找头文件。
使用场景:
- 头文件不在标准目录(如
/usr/include)中时。 - 项目中有自定义的
include/目录。
- 头文件不在标准目录(如
生效阶段:编译阶段,即将源代码(
.c/.cpp)转换为目标文件(.o)。示例:
1
2gcc -Iinclude -c src/main.c -o build/main.oIinclude:从include/目录中查找头文件。- 头文件的查找顺序:
#include "header.h":先查找当前目录,再查找I指定目录。#include <header.h>:直接查找标准目录和I指定目录。
2. L(Library Path)
功能:告诉链接器在指定的目录中查找库文件(
.so或.a)。使用场景:
- 链接阶段需要引用非系统目录中的库。
- 第三方库安装在自定义目录中。
生效阶段:链接阶段,即将目标文件(
.o)组合为可执行文件。示例:
1
2gcc -Llib -lmylib -o myprogram build/main.oLlib:从lib/目录中查找libmylib.so或libmylib.a。lmylib:指定链接库libmylib。
配合使用 I 和 L
在实际开发中,-I 和 -L 经常一起使用:
1 | |
Iinclude:- 编译器在
include/中查找头文件myheader.h。
- 编译器在
Llib:- 链接器在
lib/中查找库文件libmylib.so或libmylib.a。
- 链接器在
lmylib:- 指定链接
libmylib。
- 指定链接
总结
I和L的不同点:I:解决的是头文件的查找问题,编译阶段生效。L:解决的是库文件的查找问题,链接阶段生效。
- 配合使用:
I和L常搭配使用,因为库的头文件和库文件通常存放在不同的目录下,分别需要两个选项来指定路径。
- 记忆小技巧:
I→ Include → 头文件路径。L→ Library → 库文件路径。
gcc/g++
https://williammarioalan.github.io/2025/01/30/gcc-g/