Gtkmm 编译错误

问题描述 投票:0回答:3

操作系统:Windows 7

编译器:MinGW

IDE:代码::块

我刚刚在我的计算机上的文件夹 C:/gtkmm/ 中安装了 Gtkmm,并设置了一个示例程序。当我编译它时,它给出了错误“gtkmm.h: No such file or directory”

我尝试将 PATH 变量设置为 C:/gtkmm/include 和 C:/gtkmm/gtkmm-2.4,但均无效。然后我尝试使用 #include "C:/gtkmm/include/gtkmm-2.4/gtkmm.h" 并且只是给出了一大堆错误说它不知道几十个文件在哪里。

我还听说你需要在编译器选项中加入

pkg-config gtkmm-2.4 --cflags --libs
,但这也没有用。

我做错了什么,我该如何解决?

c++ compiler-construction mingw gtkmm
3个回答
2
投票

pkg-config 是一个辅助函数,用于将 cflags 和 lib 路径添加到编译器行。

您需要做的是将库和 cflags 路径添加到编译器行。我不是 100% 确定如何在 code::blocks 中做到这一点,虽然

在 ubuntu 11.04 中,你需要所有这些来编译一个简单的 gtkmm 程序:

库(pkg-config --libs gtkmm-2.4:

-pthread -lgtkmm-2.4 -latkmm-1.6 -lgdkmm-2.4 -lgiomm-2.4 -lpangomm-1.4 -lgtk-x11-2.0 -lglibmm-2.4 -lcairomm-1.0 -lsigc-2.0 -lgdk-x11-2.0 -latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lm -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lrt -lglib-2.0 

cflags 路径(pkg-config --cflags gtkmm-2.4):

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

基本上,您必须将

/usr/include/
/usr/lib/
的每个实例更改为
c:\path-to-library\

我不确定 MinGW 需要多少以上内容,但是对于 Linux 上的 GCC,删除其中任何一个都会导致 gtkmm 程序无法编译。希望至少能让你走上正确的道路。


1
投票

PATH变量是什么意思?全局窗口搜索可执行文件的路径?那是错误的。

您需要在您的 IDE 中查找

Include search path
header search path
或类似的东西。

当您在命令行上执行该 pkg-config 命令时,它对您有用吗?这样的 pkg-config 在 unix 系统上使用时包含在反引号 ` 中,这导致它被它的输出替换。不知道你的 IDE 是否可以做到这一点,但如果它可以从命令行运行,你至少有一个包含所有需要的列表。


0
投票

使用 autotools C++ 项目。您只需要编辑两个文件

configure.ac
Makefile.am
。 将此行添加到
configure.ac

PKG_CHECK_MODULES([GTKMM], [gtkmm-3.0])

和这些线到

Makefile.am

program_CPPFLAGS = $(GTKMM_CFLAGS)

program_LDADD = $(GTKMM_LIBS)

© www.soinside.com 2019 - 2024. All rights reserved.