0

首先,我必须说我是 linux 新手。我使用 ubuntu 并尝试编译一些 c 代码。我学习了 gtk 并用 gcc 编译了一些程序,但我想为 windows 制作它。这就是为什么我将 gtk for windows 下载到一个包中,并将 include 和 lib 文件夹放入 /usr/i686-w64-mingw32。但是当我尝试用 mingw 编译我的源代码时,它说找不到 gtk/gtk.h。我应该怎么办?

谢谢大家。

4

2 回答 2

0

将您所在的目录添加pkg-config.exe到您的目录PATH,或将PKG_CONFIG_DIR环境变量设置为该目录。

于 2012-12-14T17:47:04.333 回答
0

我知道这个问题真的很老了,但是......

交叉编译时,您需要使用“--sysroot”参数指定 sysroot。

--sysroot=dir: 使用 dir 作为头文件和库的逻辑根目录。例如,如果编译器通常会在 /usr/include 中搜索头文件并在 /usr/lib 中搜索库,那么它将改为搜索 dir/usr/include 和 dir/usr/lib。[[参考]][1]

执行此操作时,包含路径等均相对于 sysroot,在您的情况下为“/usr/i686-w64-mingw32/”。由于您将库放在“lib”中,而将头文件放在“include”中,所以除了使用 GTK 编译可能需要的任何额外参数之外,一切都应该正常工作。

如果您查看“pkg-config --cflags gtk+-2.0”的输出,那么它应该如下所示:

-pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include -I/usr/include/gio-unix-2.0/ -I/usr/include/ cairo -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/libpng12 -I/ usr/include/gdk-pixbuf-2.0 -I/usr/include/libpng12 -I/usr/include/pango-1.0 -I/usr/include/harfbuzz -I/usr/include/pango-1.0 -I/usr/包括/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/freetype2

如果您正在指定 sysroot 并且仍然收到您报告的错误,那么您可能将头文件放在错误的文件夹中。gtk.h 的本机路径是“/usr/include/gtk-2.0/gtk/gtk.h”,因此要交叉编译 mingw GTK 包中的版本,应将其复制到“/usr/i686-w64-mingw32/包括/gtk-2.0/gtk/gtk.h”。

最后请注意,pkg-config 为您提供“-I/usr/lib/x86_64-linux-gnu/gtk-2.0/include”。如果您正确指定 sysroot,并将头文件放在 pkg-config 描述的位置,则此包含路径可能仍然会给您带来问题。问题是 pkg-config 为您提供了本机编译的答案,而您想要交叉编译。

于 2016-11-22T09:02:18.903 回答