You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GTKMM编译求助:Hello World示例链接失败(MSYS2环境)

解决MSYS2编译GTKMM Hello World的链接错误

问题详情

尝试在MSYS2环境编译GTKMM 4.x的Hello World示例,使用了两种编译命令:

命令1(手动指定头文件和库)

-DLIBDEFLATE_DLL -IC:/msys64/mingw64/include/gtkmm-4.0 -IC:/msys64/mingw64/lib/gtkmm-4.0/include -IC:/msys64/mingw64/include/gtk-4.0 \
-IC:/msys64/mingw64/include/cairo -IC:/msys64/mingw64/include/graphene-1.0 \
-IC:/msys64/mingw64/lib/graphene-1.0/include -IC:/msys64/mingw64/include/pangomm-2.48 \
-IC:/msys64/mingw64/lib/pangomm-2.48/include -IC:/msys64/mingw64/include/giomm-2.68 \
-IC:/msys64/mingw64/lib/giomm-2.68/include -IC:/msys64/mingw64/include/glibmm-2.68 \
-IC:/msys64/mingw64/lib/glibmm-2.68/include -IC:/msys64/mingw64/include/cairomm-1.16 \
-IC:/msys64/mingw64/lib/cairomm-1.16/include -IC:/msys64/mingw64/include/sigc++-3.0 \
-IC:/msys64/mingw64/lib/sigc++-3.0/include -IC:/msys64/mingw64/include/pango-1.0 \
-IC:/msys64/mingw64/include/harfbuzz -IC:/msys64/mingw64/include/pango-1.0 \
-IC:/msys64/mingw64/include/fribidi -IC:/msys64/mingw64/include/cairo \
-IC:/msys64/mingw64/include/freetype2 -IC:/msys64/mingw64/include/harfbuzz \
-IC:/msys64/mingw64/include/pixman-1 -IC:/msys64/mingw64/include/gdk-pixbuf-2.0 \
-IC:/msys64/mingw64/include/libpng16 -IC:/msys64/mingw64/include/webp \
-IC:/msys64/mingw64/include/glib-2.0 -IC:/msys64/mingw64/lib/glib-2.0/include \
-lgtkmm-4.0 -lgtk-4.0 -lpangowin32-1.0 -lcairo-gobject -lgraphene-1.0 -lpangomm-2.48 \
-lgiomm-2.68 -lgio-2.0 -lglibmm-2.68 -lcairomm-1.16 -lsigc-3.0 -lpangocairo-1.0 -lpango-1.0 \
-lharfbuzz -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0 -lintl

命令2(使用pkg-config)

g++ -static -static-libgcc `pkg-config gtkmm-4 --cflags --libs` 

执行后均出现以下链接错误:

C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgtk-4: No such file or directory
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lgraphene-1.0: No such file or directory
collect2.exe: error: ld returned 1 exit status

已添加C:\msys64\mingw64\bin到系统路径,且确认gtk-4和graphene的头文件、库文件均存在于对应目录,示例代码如下:

#include <gtkmm.h>

class Win : public Gtk::Window
{
    public:
        Win();
};

Win::Win()
{
    set_title("Hello world");
    set_default_size(500,500);
}

int main (int argc, char * argv[])
{
    auto app = Gtk::Application::create("org.gtkmm.examples.base");
    return app->make_window_and_run<Win>(argc, argv);
}

解决步骤

  • 修正pkg-config包名:MSYS2中GTKMM 4.x的正确pkg-config包名是gtkmm-4.0,而非gtkmm-4。修改后的编译命令需包含源文件名:

    g++ -static -static-libgcc `pkg-config gtkmm-4.0 --cflags --libs` main.cpp -o hello.exe
    

    替换main.cpp为你的实际源文件名。

  • 安装静态库依赖:由于使用了-static参数,需确保安装了GTK4、graphene及GTKMM的静态库版本,在MinGW64终端执行:

    pacman -S mingw-w64-x86_64-gtk4-static mingw-w64-x86_64-graphene-static mingw-w64-x86_64-gtkmm4
    
  • 手动指定库路径:若pkg-config仍无法定位库文件,可在编译命令中添加库目录参数:

    g++ -static -static-libgcc -LC:/msys64/mingw64/lib `pkg-config gtkmm-4.0 --cflags --libs` main.cpp -o hello.exe
    
  • 确认终端环境:必须使用MinGW64终端启动编译,MSYS2终端的环境变量配置与MinGW64不兼容,会导致pkg-config无法正确识别库路径。

内容的提问来源于stack exchange,提问作者loaded_dypper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:25:30