我在Golang 1.10中构建Windows DLL时遇到问题,此最新版本支持此功能:

我现在有一个非常简单的程序(main.go),该程序仅导出一个函数" Test",但是在使用以下" go build"命令时出现问题:env GOOS=windows GOARCH=386 go build -buildmode=c-shared main.go

具体来说,接收到can't load package: package main: build constraints exclude all Go files in [PATH]错误。 main.go的源代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package main

import (
   "C"
   "fmt"
)

func main() {
    fmt.Println("from main")
}

//export Test
func Test() string {
    return"this is a test"
}

在未指定GOOSGOARCH的情况下进行构建之前,我从未遇到此错误。 希望有人遇到此问题,可以帮助我。

  • 是否启用了cgo? 您安装了C编译器吗?
  • 对我在Golang的愚昧致歉。 我添加了CGO_ENABLED=1选项,该选项应启用CGO。 新命令是env GOOS=windows GOARCH=386 CGO_ENABLED=1 go build -buildmode=c-shared main.go,但是现在我正在接收gcc_libinit_windows.c:7:10: fatal error: windows.h file not found。 我在OSX上编译(如果有帮助)。
  • 如果您在osx上进行编译,是否为Windows安装了完整的C编译器工具链?
  • 理想情况下,我希望将此代码在应该已安装gcc的Ubuntu系统上进行编译。 尝试在Ubuntu上进行构建会出现以下错误:gcc: error: unrecognized command line option ‘-mthreads’; did you mean ‘-pthread’?到目前为止,感谢您的帮助!
  • 安装gcc并不意味着您可以针对Windows进行编译。 您需要Windows编译器和所有必需的标头。 Windows的IIRC支持的编译器是mingw。
  • JimB,你是男人! 最终的结果是:1.在Ubuntu:sudo apt-get install gcc-mingw-w64-i686sudo apt-get install gcc-mingw-w64-x86-64上安装mingw 2.在Ubuntu:env GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.goenv GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.go上为Windows编译。3.验证rundll32.exe main.dll,Test是否可以正常使用。再次感谢!
  • 确保在Ubuntu上安装了MinGW:sudo apt-get install gcc-mingw-w64-i686sudo apt-get install gcc-mingw-w64-x86-64

  • 使用以下命令进行编译:GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.goGOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.go

  • 通过测试"测试"导出来验证生成的DLL是否有效:rundll32.exe main.dll,Test

    • 我想知道为什么您将所有这些env都散布了起来; 没有它们,应该可以正常工作。