只有当动态库(.dll)与.go / .exe文件

时间:2018-02-17 20:38:39

标签: go dll cgo

我正在尝试通过导入我构建的动态链接库在 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文件。

0 个答案:

没有答案