2013-08-14 1 views
2

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

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) 

Любая идея, как решить эту проблему?

ответ

5

ОЦП требователен форматирования: вы должны держать «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)); 
} 
1

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

Во-вторых, ваши параметры ОЦП должны быть присоединены непосредственно к импорту «C», поэтому он должен читать

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

import (
    // your other imports 
)