sách gpt4 ăn đã đi

不能用宏包装 cgo 标志

In lại 作者:数据小太阳 更新时间:2023-10-29 03:23:55 31 4
mua khóa gpt4 giày nike

我编写了一个 Go 程序来模拟按键操作。为此,我必须使用 cgo 和不同的 C 代码片段,具体取决于正在编译 Go 代码的操作系统。我编写的代码如下所示:

package keyboard

/*
#include
#ifdef __WIN32
#cgo CFLAGS:-nostdlib
#include

void SetKey(uint16_t key, uint8_t value) {
INPUT ip;

ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0;
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;

ip.ki.wVk = key;
nếu (giá trị) {
ip.ki.dwFlags = 0;
} khác {
ip.ki.dwFlags = KEYEVENTF_KEYUP;
}

SendInput(1, &ip, sizeof(INPUT));
}
#kết thúc nếu

#ifdef __linux__
#cgo LDFLAGS: -lX11 -lXtst
#include
#include //TODO: REMOVE

#include
#include
#include

void SetKey(uint16_t key, uint8_t value) {
Display *display;
display = XOpenDisplay(NULL);

if(display == NULL) {
exit(EXIT_FAILURE);
}

XTestFakeKeyEvent(display,XKeysymToKeycode(display,key), value, 0);
XCloseDisplay(display);
}
#kết thúc nếu
*/
import "C"

func SetKey(keyId uint16, value bool) {
C.SetKey(C.uint16_t(keyId),boolToByte(value));
}

func boolToByte(value bool) C.uint8_t {
if(value) {
trở lại 1
} khác {
trả về 0
}
}

代码在 Ubuntu 上编译正常,但在 Windows 10 上出现以下错误

C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lX11
C:/TDM-GCC-64/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lXtst

即使行 #cgo LDFLAGS: -lX11 -lXtst 包含在 #ifdef __linux__#kết thúc nếu 中。问题出在哪里?GCC 编译器是否定义了 __linux__ 宏?关键字 #cgo 不应该这样使用吗?

câu trả lời hay nhất

#cgo 指令由 go 工具使用,而不是 C 预处理器。

hiện hữucgo documentation , 有使用 build constraints 的例子有条件地设置标志值。你想要的是

#cgo windows CFLAGS:-nostdlib
#cgo linux LDFLAGS: -lX11 -lXtst

关于不能用宏包装 cgo 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47485904/

31 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress