将Golang与XLib连接起来

将Golang与XLib连接起来,go,cgo,Go,Cgo,我正试图使用以下代码在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("%

我正试图使用以下代码在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());
}
但它会导致以下错误消息:

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)

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

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));
}
主程序包
//#cgo LDFLAGS:-lX11
//#包括
输入“C”
进口(
“fmt”
)
func main(){
变量dpy=C.XOpenDisplay(无)
如果dpy==nil{
恐慌(“无法打开显示”)
}
fmt.Println(“%ix%i”,C.XDisplayWidth(dpy,0),C.XDisplayHeight(dpy,0));
}

首先,您不想直接使用
围棋工具cgo
,除非您有这样做的具体原因。继续使用
go build
,就像不使用cgo的项目一样

其次,您的cgo参数需要直接附加到“C”导入,因此它必须读取

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

import (
  // your other imports
)
/#cgo LDFLAGS:-lX11
//#包括
输入“C”
进口(
//你的其他进口产品
)
// #cgo LDFLAGS: -lX11
// #include <X11/Xlib.h>
import "C"

import (
  // your other imports
)