【问题标题】:Gtkmm Build ErrorGtkmm 构建错误
【发布时间】:2018-03-05 15:16:21
【问题描述】:

操作系统: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 在 Debian 9.1 上运行此代码。您是否尝试过不使用 CMake 直接运行它? g++ main.cc $(pkg-config --libs --cflags gtkmm-3.0)
  • 有趣,也许我需要重新运行 cmake 并确保它使用的是正确版本的 Gtkmm。下次我在我的电脑前试试。

标签: c++ gtk gtk3 gtkmm gtkmm3


【解决方案1】:

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

pkg_check_modules(GTKMM gtkmm-3)

应该是:

pkg_check_modules(GTKMM gtkmm-3.0)

感谢 JohnKoch 帮助解决此问题。

【讨论】:

  • 我认为您的 CMake 定义有问题。当找不到 gtkmm-3(正确的 mod 应该是 gtkmm-3.0)时,make-file 进程应该立即失败。改进您的 CMake 文件并根据项目要求设置模块。
  • 正如@JohnKoch 所说,您应该使用pkg_check_modules(GTKMM REQUIRED gtkmm-3.0)REQUIRED 参数确保配置失败 il 找不到模块。
猜你喜欢
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多