1

操作系统:Debian 9.1

编译器:gcc(Debian 6.3.0-18)

GTK+ 版本:3.22.11-1

Gtkmm 版本:3.22.0-1

大家好,我一直在处理 Gtkmm 3.22.0-1 构建教程中给出的简单应用程序的一个讨厌的问题。我正在使用 CMake 构建项目,但出现以下错误:

error: 'Gtk::Application' has not been declared
    Gtk::Application::create(argc, argv,
(recipe for target failed, etc...)

此错误是由 Gtkmm 的标准“最简单程序”引起的。

#include <iostream>
#include<gtkmm.h>

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

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

    return app->run(win);
}

根据研究,我可以说这个错误在 Gtkmm 3 发布时很常见,因为 Gtk::Application 直到 Gtkmm 3.4(大约 2012 年)才实现。上面给出的示例适用于 GNOME 文档站点(上面的链接)中的 Gtkmm 3。

我已经安装了 Gtkmm-3-dev,pkg-config 返回所有正确的标志和目录,并且 CMakeLists.txt 包括以下内容:

find_package(PkgConfig REQUIRE)
pkg_check_modules(GTKMM gtkmm-3)
link_directories( ${GTKMM_LIBRARY_DIRS} )
include_directories( ${GTKMM_INCLUDE_DIRS} )
...
target_link_libraries(proj ${GTKMM_LIBRARIES} )

'proj' 是我的项目的名称。我正在运行 Debian GNU/Linux 9.1 (stretch)。pkg-config gtkmm-3 --cflags 的输出:

-pthread -I/usr/include/gtkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include -I/usr/include/atkmm-1.6 -I/usr/include/gtk-3.0/unix-print -I/usr/include/gdkmm-3.0 -I/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include -I/usr/include/giomm-2.4 -I/usr/lib/x86_64-linux-gnu/giomm-2.4/include -I/usr/include/pangomm-1.4 -I/usr/lib/x86_64-linux-gnu/pangomm-1.4/include -I/usr/include/glibmm-2.4 -I/usr/lib/x86_64-linux-gnu/glibmm-2.4/include -I/usr/include/gtk-3.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/at-spi-2.0 -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/gtk-3.0 -I/usr/include/gio-unix-2.0/ -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/cairomm-1.0 -I/usr/lib/x86_64-linux-gnu/cairomm-1.0/include -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/sigc++-2.0 -I/usr/lib/x86_64-linux-gnu/sigc++-2.0/include -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng16 -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include

我找不到任何与此问题相关的最新帖子,我的下一个选择是筛选 Gtkmm API 文档以寻找答案。我发现有一个 Gio::Application 可能以类似的方式工作,但我还没有完全探索这一点。非常感谢任何帮助,谢谢。

山姆

4

1 回答 1

1

问题解决了,问题在于 CMake 找不到 Gtkmm-3,因为包的标题是“gtkmm-3.0”。所以 CMakeLists.txt 中的这一行:

pkg_check_modules(GTKMM gtkmm-3)

应该是:

pkg_check_modules(GTKMM gtkmm-3.0)

感谢 JohnKoch 帮助解决了这个问题。

于 2017-09-24T23:07:05.097 回答