I want to use the following c as Go cgo:
#include <X11/extensions/scrnsaver.h>
main() {
XScreenSaverInfo *info = XScreenSaverAllocInfo();
Display *display = XOpenDisplay(0);
XScreenSaverQueryInfo(display, DefaultRootWindow(display), info);
printf("%u ms\n", info->idle);
}
build with:
gcc -o idle printXIdleTime.c -lX11 -lXss
I rewrote this code for Go cgo:
package tools
import "C"
func GetIdleTime() (idleTime uint32) {
var info *C.XScreenSaverInfo
var display *C.Display
info = C.XScreenSaverAllocInfo()
display = C.XOpenDisplay(0)
defaultRootWindow := C.XDefaultRootWindow(display)
C.XScreenSaverQueryInfo(display, defaultRootWindow, info)
idleTime = info.idle
return
}
tried to compile with:
go build -gccgoflags="-lXss -lX11"
however, I get linker errors:
/tmp/go-build076004816/opensource.stdk/lib/tools/_obj/x11.cgo2.o: In the _cgo_c0e279f6f16e_Cfunc_XScreenSaverAllocInfo': ./x11.go:52:
undefined reference toXScreenSaverAllocInfo function '/ tmp / go -build076004816 / opensource.stdk / lib / tools / _obj / x11.cgo2.o: In function _cgo_c0e279f6f16e_Cfunc_XScreenSaverQueryInfo': ./x11.go:65:
undefined reference toXScreenSaverQueryInfo 'collect2: error: ld returned 1 exit status
what am I doing wrong?
source
share