c++ - Gtkmm 构建错误

标签 c++ gtk gtk3 gtkmm gtkmm3

操作系统:Debian 9.1

编译器:gcc(Debian 6.3.0-18)

GTK+ 版本:3.22.11-1

Gtkmm 版本:3.22.0-1

大家好,我一直在用 Gtkmm 3.22.0-1 处理一个讨厌的问题,构建 tutorial 上给出的简单应用程序.我正在使用 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 可能以类似的方式工作,但我还没有完全探索这一点。非常感谢任何帮助,谢谢。

山姆

最佳答案

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

pkg_check_modules(GTKMM gtkmm-3)

应该是:
pkg_check_modules(GTKMM gtkmm-3.0)

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

关于c++ - Gtkmm 构建错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46391877/

相关文章:

c++ - boost::asio::deadline_timer 导致 "a function call cannot appear in a constant-expression"错误

c++ - 使用 C++ 更新二进制文件中的记录

python - 在 glade 中使用文件选择器对话框

python - 如何在 Gtk.Grid 的单元格周围放置边框,就像在 HTML 表格中一样?

gtk - 如何在 Gtk+3 中创建固定大小的 Gtk.TextView?

python - GTK3绘图区教程好像没有?

c++ - 使用atoi (“argument of type ' int *' is incompatible with type ' const char *' ”)并添加数组时出错

c++ - 不兼容的类型 - 是因为数组已经是指针了吗?

linux - Linux应用本地化

无法理解奇怪的 C 运行时错误。需要帮忙?