为了账号安全,请及时绑定邮箱和手机立即绑定

将 Golang 与 XLib 连接起来

将 Golang 与 XLib 连接起来

Go
DIEA 2021-06-23 08:01:41
我正在尝试使用以下代码在 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 in1: error: 'XDisplayWidth' undeclared (first use in this function)1: error: 'XDisplayHeight' undeclared (first use in this function)知道如何解决这个问题吗?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超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));

}


查看完整回答
反对 回复 2021-06-28
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

首先,你不想go tool cgo直接使用,除非你有特定的理由这样做。go build像不使用 cgo 的项目一样继续使用。


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


// #cgo LDFLAGS: -lX11

// #include <X11/Xlib.h>

import "C"


import (

  // your other imports

)



查看完整回答
反对 回复 2021-06-28
  • 2 回答
  • 0 关注
  • 265 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信