无法使用GTK + 3编译Nim文件

时间:2018-11-04 09:27:05

标签: gtk3 nim

我是新手。(我的英语说得不好。)

我正在尝试使用gtk编译Nim代码

{.push header:"<gtk/gtk.h>",varargs.}
proc gtk_init(argc,argv:pointer=nil)
proc gtk_window_new(typ:int):pointer
proc gtk_main_quit
proc gtk_widget_show(win:pointer)
proc gtk_main
{.pop.}
var maindow:pointer

gtk_init()
maindow=gtk_window_new(0)
maindow.gtk_widget_set_size_request(300,200)
maindow.gtk_widget_show()
gtk_main()

我正在使用此命令->

nim c -r test

但是,它无法成功。

fatal error: gtk/gtk.h: No such file or directory
#include <gtk/gtk.h>
          ^~~~~~~~~~~
compilation terminated.

我已经安装了libgtk-3-dev,但没有解决问题。

(所以我不知道代码的语法是正确的。)

我应该怎么做?

1 个答案:

答案 0 :(得分:1)

在C程序中使用GTK时,必须通过-I传递正确的包含目录,并通过-l传递正确的链接库。通常,这些是通过调用pkg-config获得的:

$ pkg-config --cflags gtk+-3.0
-pthread -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/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/freetype2 -I/usr/include/libpng16 -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

$ pkg-config --libs gtk+-3.0                          
-lgtk-3 -lgdk-3 -lpangocairo-1.0 -lpango-1.0 -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0

因此,要告诉Nim将正确的标志传递给C编译器和链接器,您可以执行以下操作:

{.passc: staticExec("pkg-config --cflags gtk+-3.0").}
{.passl: staticExec("pkg-config --libs gtk+-3.0").}

{.push header:"<gtk/gtk.h>",varargs.}
proc gtk_init(argc,argv:pointer=nil)
proc gtk_window_new(typ:int):pointer
proc gtk_main_quit
proc gtk_widget_show(win:pointer)
proc gtk_main
{.pop.}
var maindow:pointer

gtk_init()
...

GTK的这种用法不是很典型。您可能会发现仅使用现有的包装器(例如nim-gtk3)会很麻烦。