我正在尝试使用此代码在Go中使用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)
知道如何解决这个问题吗?
答案 0 :(得分:6)
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));
}
答案 1 :(得分:1)
首先,您不希望直接使用go tool cgo
,除非您有特定的理由这样做。像对待不使用cgo的项目一样继续使用go build
。
其次,你的cgo参数需要直接附加到“C”导入,所以必须阅读
// #cgo LDFLAGS: -lX11
// #include <X11/Xlib.h>
import "C"
import (
// your other imports
)