将 Golang 与 XLib 连接起来

我正在尝试使用以下代码在 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)

知道如何解决这个问题吗?


DIEA
浏览 266回答 2
2回答

LEATH

cgo 对格式很挑剔:您需要将“C”导入分开,并将序言注释放在紧邻上方:package main// #cgo LDFLAGS: -lX11// #include <X11/Xlib.h>import "C"import (&nbsp; &nbsp; "fmt")func main() {&nbsp; &nbsp; var dpy = C.XOpenDisplay(nil)&nbsp; &nbsp; if dpy == nil {&nbsp; &nbsp; &nbsp; &nbsp; panic("Can't open display")&nbsp; &nbsp; }&nbsp; &nbsp; fmt.Println("%ix%i", C.XDisplayWidth(dpy, 0), C.XDisplayHeight(dpy, 0));}

一只萌萌小番薯

首先,你不想go tool cgo直接使用,除非你有特定的理由这样做。go build像不使用 cgo 的项目一样继续使用。其次,你的 cgo 参数需要直接附加到“C”导入,所以它必须读取// #cgo LDFLAGS: -lX11// #include <X11/Xlib.h>import "C"import (&nbsp; // your other imports)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go