我正在尝试通过导入我构建的动态链接库在 windows 中编写一个go程序。为了使用这些自定义.dll文件构建go程序,我在go源文件中使用了cgo&#CFSLAGS和LDFLAGS。代码如下所示:
/*
#cgo CFLAGS: -I${SRCDIR}/lib
#cgo LDFLAGS: -L${SRCDIR}/lib -lkeyboard
#include <keyboard.h>
*/
import "C"
import "fmt"
func main() {
fmt.Printf("Hello word\n")
C.InitKeyboard()
fmt.Printf("\nEnter: ")
for {
r := C.GetCharacter()
fmt.Printf("%c", r)
if r == 'q' {
break
}
}
C.Closeboard()
}
我的目录结构:
src
|_hello.go
|_lib
----|_keyboard.h
----|_keyboard.c
----|_libkeyboard.dll
标题(.h)和动态链接库(.dll)保存在名为&#39; lib&#39;的文件夹中。与.go程序文件存在相同级别,此代码编译/构建但是当我运行构建的.exe文件时,它会抛出错误&#39; libkeyboard.dll找不到&#39;,但是当我放置libkeyboard.dll与编译的.exe文件位于同一位置。 我想理解为什么它能够在编译期间从提到的路径(./lib)中获取库文件,但是在运行时没有做同样的事情。 我知道创建 PATH 变量将有助于它定位,但是当我已经给出库文件位置CFLAGS和LDFLAGS时,如果没有设置 PATH ,它为什么不起作用。 / p>
如何使其适用于静态库文件&#39; libkeyboard.a&#39;因为我观察到构建的.exe文件搜索libkeyboard.dll文件并且不接受libkeyboard.a文件。