【问题标题】:gtkmm not found in MinGW despite being installed尽管已安装,但在 MinGW 中找不到 gtkmm
【发布时间】:2019-09-21 13:57:51
【问题描述】:

我正在尝试编译以下简单文件(来自教程站点之一的演示代码),但尽管已安装 gtkmm.h,但仍未找到。

$ cat rngtk1.cpp
#include <iostream>
#include <gtkmm.h>
int
main( int argc, char* argv[] ){
 try {
  Gtk::Main m( argc, argv ) ;
  Gtk::Window win ;
  m.run( win ) ;
 }
 catch( std::exception const & exc ) {
  std::cout << exc.what() << std::endl ;
  exit( -1 ) ;
 }
 exit( 0 ) ;
}

在给出编译命令时:

$ g++ rngtk1.cpp
rngtk1.cpp:2:10: fatal error: gtkmm.h: No such file or directory
    2 | #include <gtkmm.h>
      |          ^~~~~~~~~
compilation terminated.

更改为“gtkmm.h”没有帮助

以下显示相关软件包已安装:

$ pacman -Ss gtkmm
mingw32/mingw-w64-i686-gtkmm 2.24.5-2
    C++ bindings for gtk2 (mingw-w64)
mingw32/mingw-w64-i686-gtkmm3 3.24.1-1
    C++ bindings for gtk3 (mingw-w64)
mingw64/mingw-w64-x86_64-gtkmm 2.24.5-2
    C++ bindings for gtk2 (mingw-w64)
mingw64/mingw-w64-x86_64-gtkmm3 3.24.1-1 [installed] <<<<<<<<<<<<<<<<< NOTE
    C++ bindings for gtk3 (mingw-w64)

$ pacman -Ss gtk3
mingw32/mingw-w64-i686-gtk3 3.24.10-3
    GObject-based multi-platform GUI toolkit (v3) (mingw-w64)
mingw32/mingw-w64-i686-gtkmm3 3.24.1-1
    C++ bindings for gtk3 (mingw-w64)
mingw32/mingw-w64-i686-spice-gtk 0.37-1
    GTK3 widget for SPICE clients (mingw-w64)
mingw64/mingw-w64-x86_64-gtk3 3.24.10-3 [installed] <<<<<<<<<<<<<<<<< NOTE
    GObject-based multi-platform GUI toolkit (v3) (mingw-w64)
mingw64/mingw-w64-x86_64-gtkmm3 3.24.1-1 [installed] <<<<<<<<<<<<<<<<< NOTE
    C++ bindings for gtk3 (mingw-w64)
mingw64/mingw-w64-x86_64-spice-gtk 0.37-1
    GTK3 widget for SPICE clients (mingw-w64)

问题出在哪里,如何解决?

【问题讨论】:

    标签: c++ mingw gtk3 gtkmm3


    【解决方案1】:

    包的包含文件不在默认搜索路径中。您需要通过编译器标志-I 提供它们。由于它们很多,在 MSYS2 中最适合我的方法是使用 pkg-config,它将输出编译和链接所需的所有标志:

    g++ $(pkg-config --cflags gtkmm-3.0) -c rngtk1.cpp -o rngtk1.o
    g++ rngtk1.o $(pkg-config --libs gtkmm-3.0) -o rngtk1.exe
    

    【讨论】:

    • 是的,它创建了一个可执行文件,但是由于找不到libgtkmm-3.0-1.dll,exe 文件没有运行。我在哪里可以找到这个文件?
    • libgtkmm-3.0-1.dll/mingw64/bin 中,当我使用“MSYS2 MinGW 64-bit”启动器启动 MSYS2 时,它会自动添加到 $PATH开始菜单。如果以其他方式启动 MSYS2 shell,则需要手动将 /mingw64/bin 添加到 $PATH
    • 我的意思是可执行文件在转移到其他 Windows 系统时不会运行。使用 exe 文件复制 libgtkmm-3.0-1.dll 会导致错误显示许多 dll 丢失。将我的 exe 文件分发给我的朋友时,我是否还需要复制所有这些 dll?有什么方法可以将所有需要的dll文件与exe文件静态链接?
    • 是的,我相信最常见的方法是将这些 DLL 与您的应用程序捆绑在一起,但您可能还需要其他文件。 Gtk+ 很大。这似乎相关:stackoverflow.com/questions/49092784/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    相关资源
    最近更新 更多