Невозможно скомпилировать файл Nim с помощью GTK + 3 - PullRequest
0 голосов
/ 04 ноября 2018

Я новичок. (И я не могу лучше говорить по-английски.)

Я пытаюсь скомпилировать код Nim с помощью gtk

{.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 голосов
/ 09 февраля 2019

Когда вы используете GTK из программы на C, вы должны передать правильные каталоги включения с -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 .

...