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

时间:2018-02-05 10:37:42

标签: c++ compilation gtkmm pkg-config gtkmm3

我正在处理gtkmm文档。我已经开始尝试编译"简单示例"。这是代码。它也可以找到here

/// 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);
}

我尝试使用

编译它
g++ SimpleExample.cpp -o SimpleExample `pkg-config gtkmm-3.0 --cflags --libs`

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

正在运行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

我正在运行Debian 9 Stretch。我用

安装了gtkmm
sudo apt update && sudo apt install libgtkmm-3.0-dev

正在运行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

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

更新

新终端

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

尝试

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

导出位置

export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig"

重新运行

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

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

尝试再次找到

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

更改导出命令

export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig;/usr/share/pkgconfig"

重新开始,回到正方形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

问题已解决(排序ot)

我从阅读此question时发现,路径应该是冒号分隔的。

    export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:/usr/share/pkgconfig"

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

此外,网上缺少有关此问题的信息让我怀疑这是大多数用户不会遇到的问题,因此可能特定于Debian 9.(我想知道是否还有其他人对问题,以及什么操作系统。)

1 个答案:

答案 0 :(得分:0)

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