3

このコードを使用して、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)

これを解決する方法はありますか?

4

2 に答える 2

8

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));
}
于 2013-08-14T17:12:00.757 に答える
2

まず第一に、go tool cgo特別な理由がない限り、直接使用したくありません。go buildcgo を使用しないプロジェクトの場合と同様に、引き続き使用してください。

次に、cgo パラメーターを「C」インポートに直接アタッチする必要があるため、

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

import (
  // your other imports
)
于 2013-08-14T17:14:02.070 に答える