go - 将 Golang 与 XLib 连接起来

标签 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("%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)

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

最佳答案

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));
}

关于go - 将 Golang 与 XLib 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18237738/

相关文章:

url - 从 URL 中提取不区分大小写的查询参数

在返回 Go Runtime 之前,Cgo 在 x_cgo_notify_runtime_init_done 中被阻塞

pointers - Cgo指针字符串 slice (*[]string)的指针传递规则?

go - 在 Golang 项目中正确包含 C 库(按源代码)

go - 从 zipkintracer 获取 traceId

go - 如何取消引用动态多级指针?

映射并发访问

go - 我如何在 Golang 中使用这个函数?

将 C 结构转换为 Go 结构的好方法或推荐方法

go - Go语言的cgo如何编译Cuda源码?