使用Golang 1.10无法编译Windows DLL

我在使用Golang 1.10构建Windows DLL时遇到问题,该最新版本支持该语言:</ p “>

”各种构建模式已移植到更多系统。具体地说,c-shared现在可在linux / ppc64le,windows / 386和Windows / amd64上运行;“ (来源: https://golang.org/doc/go1.10 )</ p >

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

具体地说,接收到无法加载包: 包主要:构建约束排除[PATH] </ code>中的所有Go文件错误。 main.go </ code>的源代码如下所示:</ p>

  package main 

import(
“ C”
“ fmt” \ n)

func main(){
fmt.Println(“ from main”)
}

// export Test
func Test()字符串{
返回“这是一个测试”
}
</ code> </ pre>

我在未指定 GOOS </ code>和 GOARCH </ code>有效的情况下构建之前从未遇到此错误。 希望有人遇到此问题并能帮助我。</ p>
</ div>

展开原文

原文

I'm having issues building a Windows DLL in Golang 1.10, which is supported in this latest version:

"The various build modes have been ported to more systems. Specifically, c-shared now works on linux/ppc64le, windows/386, and windows/amd64;" (Source: https://golang.org/doc/go1.10)

I have a very simple program right now (main.go) that only exports one function "Test", but am having issues when using the following "go build" command: env GOOS=windows GOARCH=386 go build -buildmode=c-shared main.go

Specifically, receiving the can't load package: package main: build constraints exclude all Go files in [PATH] error. The source code for main.go is shown below:

package main

import (
    "C"
    "fmt"
)

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

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

I've never encountered this error before and building without specifying GOOS and GOARCH works. Hoping someone has encountered this issue and can help me out.

dougong1031
dougong1031 JimB,你是男人!最终成功了:1.在Ubuntu上安装mingw:sudoapt-getinstallgcc-mingw-w64-i686和sudoapt-getinstallgcc-mingw-w64-x86-642.在Ubuntu上为Windows编译:envGOOS=WindowsGOARCH=386CGO_ENABLED=1CC=i686-w64-mingw32-gccgobuild-buildmode=c-shared-omain.dllmain.goandenvGOOS=windowsGOARCH=amd64CGO_ENABLED=1CC=x86_64-w64-mingw32-gccgobuild-buildmode=c-shared-omain.dllmain.go3.验证rundll32.exemain.dll可以正常工作,再次测试!
2 年多之前 回复
dpglo66848
dpglo66848 安装gcc并不意味着您可以针对Windows进行编译。您需要Windows编译器和所有必需的标头。Windows的IIRC支持的编译器是mingw。
2 年多之前 回复
doujuan2688
doujuan2688 理想情况下,我希望将此代码在应该已安装gcc的Ubuntu系统上进行编译。尝试在Ubuntu上进行构建会产生以下错误:gcc:error:无法识别的命令行选项“-mthreads”;您是说“-pthread”吗?感谢你目前的帮助!
2 年多之前 回复
drkjzk3359
drkjzk3359 如果您在osx上进行编译,是否为Windows安装了完整的C编译器工具链?
2 年多之前 回复
dongtang5057
dongtang5057 对我在Golang的愚蠢行为表示歉意。我添加了CGO_ENABLED=1选项,该选项应启用CGO。新命令是envGOOS=windowsGOARCH=386CGO_ENABLED=1gobuild-buildmode=c-sharedmain.go,但是现在我收到的是gcc_libinit_windows.c:7:10:致命错误:找不到“windows.h”文件找到。如果有帮助,我正在OSX上进行编译。
2 年多之前 回复
dpq39825
dpq39825 是否启用了cgo?是否安装了C编译器?
2 年多之前 回复

1个回答




  1. 确保在Ubuntu上安装了MinGW: sudo apt-get install gcc-mingw -w64-i686 </ code>和 sudo apt-get install gcc-mingw-w64-x86-64 </ code> </ p> </ li>

  2. 使用以下命令编译 命令: env GOOS = windows GOARCH = 386 CGO_ENABLED = 1 CC = i686-w64-mingw32-gcc go build -buildmode = c-shared -o main.dll main.go </ code>和 env GOOS = windows GOARCH = amd64 CGO_ENABLED = 1 CC = x86_64-w64-mingw32-gcc go build -buildmode = c-shared -o main.dll main.go </ code> </ p> </ li>

  3. 通过测试“测试”导出来验证生成的DLL是否有效: rundll32.exe main.dll,测试</ code> </ p> </ li>
    </ ol>
    </ div>

展开原文

原文

  1. Make sure you have MinGW installed on Ubuntu: sudo apt-get install gcc-mingw-w64-i686 and sudo apt-get install gcc-mingw-w64-x86-64

  2. Compile using the following commands: env GOOS=windows GOARCH=386 CGO_ENABLED=1 CC=i686-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.go and env GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc go build -buildmode=c-shared -o main.dll main.go

  3. Verify generated DLL works by testing the "Test" export: rundll32.exe main.dll,Test

donglu9898
donglu9898 我不知道为什么您会把所有这些环境都散布在外面; 没有它们,应该可以正常工作。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐