Windows10下<gtkmm/button.h>找不到求助(MSYS2安装gtkmm-3.0)
我之前在MSYS2环境下配置gtkmm的时候也碰到过类似的情况,结合你的描述,pkg-config输出正常但IDE找不到库,大概率是IDE的配置和MSYS2环境没对齐,给你几个排查和解决的方向:
1. 先确认IDE用的是MSYS2的MinGW编译器
很多IDE默认自带或者用了系统里其他版本的MinGW,不是MSYS2里的mingw-w64-x86_64-gcc。你得去IDE的编译器设置里,把编译器路径改成MSYS2的mingw64/bin目录(Windows下就是C:\msys64\mingw64\bin),确保gcc、g++这些工具都是MSYS2提供的版本——这是最常见的坑!
2. 指定IDE使用MSYS2的pkg-config
IDE可能没用到MSYS2环境里的pkg-config,而是系统里的其他版本,导致它读不到gtkmm的.pc配置文件。你可以在IDE的配置里,把pkg-config的路径明确设为C:\msys64\mingw64\bin\pkg-config.exe(Unix路径就是/mingw64/bin/pkg-config),这样它才能正确解析gtkmm的依赖。
3. 手动替换路径做测试(临时验证)
有时候IDE对pkg-config输出的Unix风格路径解析有问题,你可以把pkg-config gtkmm-3.0 --cflags和--libs的输出里的/mingw64/换成Windows绝对路径,比如C:\msys64\mingw64\,然后直接粘贴到IDE的编译器和链接器选项里试试。
比如把-I/mingw64/include/gtkmm-3.0改成-IC:\msys64\mingw64\include\gtkmm-3.0,链接器里的-L/mingw64/lib改成-LC:\msys64\mingw64\lib,如果这样能编译过,就说明是路径解析的问题。
4. 从MSYS2终端启动IDE
如果你是直接双击打开IDE,它可能没加载MSYS2的环境变量(比如PATH、PKG_CONFIG_PATH这些)。试试打开MSYS2的mingw64终端,输入codeblocks或者codelite启动IDE,这样它会继承MSYS2的完整环境,大概率能识别到gtkmm。
5. 检查PKG_CONFIG_PATH环境变量
在MSYS2的mingw64终端里输入echo $PKG_CONFIG_PATH,正常应该能看到/mingw64/lib/pkgconfig和/mingw64/share/pkgconfig这些路径。如果IDE里没有这个变量,你可以手动在IDE的环境变量设置里添加:PKG_CONFIG_PATH=C:\msys64\mingw64\lib\pkgconfig;C:\msys64\mingw64\share\pkgconfig
先在终端里验证库本身没问题
写个简单的测试代码:
#include <gtkmm.h> int main(int argc, char* argv[]) { auto app = Gtk::Application::create(argc, argv, "org.gtkmm.example"); Gtk::Window window; window.set_title("Hello World"); return app->run(window); }
然后在MSYS2的mingw64终端里用命令编译:
g++ test.cpp -o test `pkg-config gtkmm-3.0 --cflags --libs`
如果这个命令能成功生成可执行文件,说明库本身安装没问题,问题肯定出在IDE的配置上,就盯着上面几个点排查就行。
内容的提问来源于stack exchange,提问作者luna80

