g++编译时无法找到指定头文件目录,请求技术帮助
编译时头文件未找到问题解决
编译命令
g++ mario_game/main.cpp mario_game/game.cpp mario_game/mario.cpp dream.cpp -lSDL2 -lSDL2_ttf -lSDL2_mixer -lSDL2_image -std=c++11 -I DreamEngine/DreamEngine2/include -o mario
项目目录结构
DreamEngine └── DreamEngine2 ├── 8bit.ttf ├── a.out ├── dream.cpp ├── hello.cpp ├── include │ └── dream.h ├── LICENSE └── mario_game ├── game.cpp ├── game.h ├── globalvars.h ├── main.cpp ├── mario.cpp └── mario.h
问题描述
执行上述编译命令后,仍提示头文件未找到。
排查与解决方案
确认终端当前工作目录:
用pwd命令查看当前所在目录,这决定了编译命令中文件路径的正确性。例如:- 若当前目录是
DreamEngine/DreamEngine2/,则dream.cpp和mario_game都是当前目录下的文件/文件夹; - 若当前目录是
DreamEngine/,则所有文件路径都需要加上DreamEngine2/前缀。
- 若当前目录是
检查头文件包含路径:
编译命令中-I参数用于指定头文件搜索目录,当前命令仅添加了dream.h所在的include目录,但未包含mario_game下的头文件目录(比如game.h、mario.h),这会导致这些头文件找不到。修正后的编译命令:
- 若当前目录是
DreamEngine/DreamEngine2/:
g++ mario_game/main.cpp mario_game/game.cpp mario_game/mario.cpp dream.cpp -lSDL2 -lSDL2_ttf -lSDL2_mixer -lSDL2_image -std=c++11 -I include -I mario_game -o mario- 若当前目录是
DreamEngine/:
g++ DreamEngine2/mario_game/main.cpp DreamEngine2/mario_game/game.cpp DreamEngine2/mario_game/mario.cpp DreamEngine2/dream.cpp -lSDL2 -lSDL2_ttf -lSDL2_mixer -lSDL2_image -std=c++11 -I DreamEngine2/include -I DreamEngine2/mario_game -o mario- 若当前目录是
验证头文件引用:
检查所有源文件中的头文件引用语句,比如#include "dream.h"、#include "game.h"是否拼写正确,避免使用错误的相对路径(如#include "../include/dream.h"),统一通过-I参数指定搜索目录更可靠。
内容的提问来源于stack exchange,提问作者Sam McLaren
相关产品推荐
相关产品推荐

