Связывание Golang с XLib

Я пытаюсь использовать XLib в Go, используя этот код:

package main

// #cgo LDFLAGS: -lX11
// #include <X11/Xlib.h>
import (
    "C"
    "fmt"
)

func main() {
    var dpy = C.XOpenDisplay(nil);
    if dpy == nil {
        panic("Can't open display")
    }

    fmt.Println("%ix%i", C.XDisplayWidth(), C.XDisplayHeight());
}

Я компилирую это через:

go tool cgo $(FILE)

Но это приводит к следующим сообщениям об ошибках:

1: error: 'XOpenDisplay' undeclared (first use in this function)
1: note: each undeclared identifier is reported only once for each function it appears in
1: error: 'XDisplayWidth' undeclared (first use in this function)
1: error: 'XDisplayHeight' undeclared (first use in this function)

Есть идеи, как это решить?


person miniml    schedule 14.08.2013    source источник


Ответы (2)


cgo привередлив к форматированию: вам нужно отделить импорт "C" и поместить преамбулу комментариев непосредственно выше:

package main

// #cgo LDFLAGS: -lX11
// #include <X11/Xlib.h>
import "C"

import (
    "fmt"
)

func main() {

    var dpy = C.XOpenDisplay(nil)
    if dpy == nil {
        panic("Can't open display")
    }

    fmt.Println("%ix%i", C.XDisplayWidth(dpy, 0), C.XDisplayHeight(dpy, 0));
}
person lnmx    schedule 14.08.2013

Прежде всего, вы не хотите использовать go tool cgo напрямую, если у вас нет особых причин для этого. Продолжайте использовать go build, как и для проектов, не использующих cgo.

Во-вторых, ваши параметры cgo должны быть прикреплены непосредственно к импорту "C", поэтому он должен читать

// #cgo LDFLAGS: -lX11
// #include <X11/Xlib.h>
import "C"

import (
  // your other imports
)
person Dominik Honnef    schedule 14.08.2013