gtkmm:简单示例无法编译:gtkmm.h:没有这样的文件或目录

use*_*501 6 c++ compilation pkg-config gtkmm gtkmm3

我正在研究 gtkmm 文档。我首先尝试编译“简单示例”。这是代码。也可以在这里找到。

/// SimpleExample.cpp

#include <gtkmm.h>

int main(int argc, char *argv[])
{
  auto app =
    Gtk::Application::create(argc, argv,
      "org.gtkmm.examples.base");

  Gtk::Window window;
  window.set_default_size(200, 200);

  return app->run(window);
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用以下方法编译它

g++ SimpleExample.cpp -o SimpleExample `pkg-config gtkmm-3.0 --cflags --libs`
Run Code Online (Sandbox Code Playgroud)

应该根据文档工作。(参见链接页面末尾。)

跑步pkg-config gtkmm-3.0 --cflags --libs产生

Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtkmm-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtkmm-3.0' found
Run Code Online (Sandbox Code Playgroud)

我正在运行 Debian 9 Stretch。我安装gtkmm

sudo apt update && sudo apt install libgtkmm-3.0-dev
Run Code Online (Sandbox Code Playgroud)

跑步find /usr -name "gtkmm"产生

/usr/lib/x86_64-linux-gnu/pkgconfig/gtkmm-3.0.pc
/usr/lib/x86_64-linux-gnu/gtkmm-3.0
/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include/gtkmmconfig.h
/usr/include/gtkmm-3.0
/usr/include/gtkmm-3.0/gtkmm
/usr/include/gtkmm-3.0/gtkmm.h
Run Code Online (Sandbox Code Playgroud)

那么为什么这个例子不能编译呢?

更新:

新航站楼

pkg-config gtkmm-3.0 --cflags --libs
Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtkmm-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtkmm-3.0' found
Run Code Online (Sandbox Code Playgroud)

尝试

find /usr -name "*gtkmm-3.0*"
/usr/lib/x86_64-linux-gnu/pkgconfig/gtkmm-3.0.pc
/usr/lib/x86_64-linux-gnu/libgtkmm-3.0.so.1.1.0
/usr/lib/x86_64-linux-gnu/libgtkmm-3.0.so.1
/usr/lib/x86_64-linux-gnu/gtkmm-3.0
/usr/lib/x86_64-linux-gnu/libgtkmm-3.0.so
/usr/share/doc/libgtkmm-3.0-1v5
/usr/share/doc/libgtkmm-3.0-dev
/usr/include/gtkmm-3.0
Run Code Online (Sandbox Code Playgroud)

出口地点

export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

重新运行

pkg-config gtkmm-3.0 --cflags --libs
Package xproto was not found in the pkg-config search path.
Perhaps you should add the directory containing `xproto.pc'
to the PKG_CONFIG_PATH environment variable
Package 'xproto', required by 'xau', not found
Run Code Online (Sandbox Code Playgroud)

(这次是一个不同的错误。)

再次尝试寻找

find /usr -name "*xproto*"
/usr/share/pkgconfig/xproto.pc
/usr/include/xcb/xproto.h
/usr/include/GL/glxproto.h
/usr/include/X11/extensions/lbxproto.h
Run Code Online (Sandbox Code Playgroud)

更改导出命令

export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig;/usr/share/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

重新运行,回到方格1

pkg-config gtkmm-3.0 --cflags --libs
Package gtkmm-3.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gtkmm-3.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'gtkmm-3.0' found
Run Code Online (Sandbox Code Playgroud)

问题已解决(排序)

我通过阅读这个问题发现路径应该用冒号分隔。

    export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig"
Run Code Online (Sandbox Code Playgroud)

然而这并没有解决为什么需要设置这个变量的问题。pkg-config使用它是因为它应该使编译更简单,但这并不比手动指定包含路径更简单,因为需要设置多个环境变量。

另外,网上缺乏关于这个问题的信息,让我怀疑这是一个大多数用户都没有遇到的问题,因此可能是 Debian 9 特有的问题。(我想知道是否还有其他人遇到过这个问题,以及在什么操作系统上。)

Man*_*uez 0

首先,安装 gtkmm 有点复杂是正常的。据我所知,在 Stackoverflow 论坛上,许多用户都遇到了这样做的问题。即使 Windows 操作系统中的用户如果尝试将 gtkmm 与 Visual Studio 一起使用来开发独立于平台的应用程序,也会遇到错误消息......但是对于您的问题。有很多选项可能会出错。一个简单的解释是,必须安装 debian 软件包 \xe2\x80\x9clibgtk-3-dev\xe2\x80\x9d,它用于用 C 语言创建 GTK+ 应用程序,因为 gtkmm 使用此软件包。所以第一步是尝试一下,GTK+ 的 C 源代码编译是否有效。第二种解释是,debian \xe2\x80\x9c 软件包管理器\xe2\x80\x9d 通常已损坏,因此切换 Linux 发行版将是一个很好的建议。例如,在 Fedora 中,dnf install gtk3 gtk3-devel gtkmm30 gtkmm30-devel开始编程就足够了。

\n