Manjaro下VSCode编译C++ gtkmm4.0程序提示无法打开gtkmm.h
Manjaro 环境 gtkmm-4.0 头文件存在但编译报错解决
问题复现
- 系统环境:Manjaro Linux,开发工具为Visual Studio Code
- 已操作:安装
gtkmm-4.0包及对应开发文档,确认/usr/include/路径下所有gtkmm相关头文件完整存在 - 报错信息:编译时抛出头文件找不到错误
cannot open source file "gtkmm.h" gtkmm.h: No such file or directory - 测试用代码:
#include <gtkmm.h> #include <iostream> int main(int argc, char* argv[]){ return 0; } - 最初使用的Makefile构建配置:
exec = game.out sources = $(wildcard src/*.cpp) objects = $(sources:.cpp=.o) flags = -g $(shell pkg-config gtkmm-4.0 --cflags) libs = $(shell pkg-config gtkmm-4.0 --libs) $(exec): $(objects) g++ $(objects) $(flags) -o $(exec) $(libs) %.o: %.cpp include/%.h g++ -c $(flags) $< -o $@ install: make cp ./game.out /usr/local/bin/game clean: -rm *.out -rm *.o -rm src/*.o
检索到的公开方案多针对其他发行版或开发环境,无法解决当前场景下的报错。
解决方法
问题根源是g++编译参数顺序不符合要求,头文件搜索路径、链接库参数没有正确传递给编译流程。在@Galik和@John的协助下,使用以下编译命令即可正常完成编译,生成的可执行文件可直接运行:
g++ src/main.cpp -o main $(pkg-config gtkmm-4.0 --cflags --libs)
补充说明:g++对编译参数顺序有严格要求,源文件需要放在编译参数靠前位置,
pkg-config导出的头文件搜索路径、链接库参数需要放在源文件之后,顺序错误会导致头文件搜索路径、链接库配置不生效,触发找不到头文件、链接失败类错误。如果需要继续使用Makefile构建,参照上述参数顺序调整编译指令、修正目标文件依赖规则即可。
内容的提问来源于stack exchange,提问作者Christian
相关产品推荐
相关产品推荐

