Ste*_*tef 13 windows dll go mingw-w64
有没有办法在Windows下针对Go v1.7构建一个dll?
我试过一个经典
go build -buildmode=shared main.go
Run Code Online (Sandbox Code Playgroud)
但得到
windows/amd64不支持-buildmode = shared
更新 好的,我有答案.对于有兴趣的人:https: //groups.google.com/forum/#!topic/golang-dev/checkFZAZbnjzU
小智 21
go build -buildmode=c-archive github.com/user/ExportHello
Run Code Online (Sandbox Code Playgroud)
====>将构建 ExportHello.a,ExportHello.h
采用内置的功能ExportHello.a并重新导出Hello2.c
gcc -shared -pthread -o Hello2.dll Hello2.c ExportHello.a -lWinMM -lntdll -lWS2_32
Run Code Online (Sandbox Code Playgroud)
====>将生成 Hello2.dll
Ano*_*rog 11
github上有一个项目,它显示了如何创建DLL,基于并且感谢user7155193的答案.
基本上你使用GCC从golang生成的.a和.h文件构建DLL.
首先,您创建一个导出函数(或更多)的简单Go文件.
package main
import "C"
import "fmt"
//export PrintBye
func PrintBye() {
fmt.Println("From DLL: Bye!")
}
func main() {
// Need a main function to make CGO compile package as C shared library
}
Run Code Online (Sandbox Code Playgroud)
编译它:
go build -buildmode=c-archive exportgo.go
Run Code Online (Sandbox Code Playgroud)
然后你创建一个C程序(goDLL.c),它将链接上面生成的.h和.a文件
#include <stdio.h>
#include "exportgo.h"
// force gcc to link in go runtime (may be a better solution than this)
void dummy() {
PrintBye();
}
int main() {
}
Run Code Online (Sandbox Code Playgroud)
使用GCC编译/链接DLL:
gcc -shared -pthread -o goDLL.dll goDLL.c exportgo.a -lWinMM -lntdll -lWS2_32
Run Code Online (Sandbox Code Playgroud)
然后goDLL.dll可以加载到另一个C程序,freepascal/lazarus程序或您选择的程序中.
带有加载DLL的lazarus/fpc项目的完整代码在这里:https: //github.com/z505/goDLL
And*_*der 10
从Go 1.10开始,Windows现在支持-buildmode = c-shared.
发行说明:https: //golang.org/doc/go1.10#compiler
所以现在编译到DLL是一个单行:
go build -o helloworld.dll -buildmode=c-shared
Run Code Online (Sandbox Code Playgroud)
我相信标题只与GCC兼容.如果你只暴露C类型,这应该不是一个大问题.我能够让LoadLibrary在没有标题的Visual Studio中工作.
| 归档时间: |
|
| 查看次数: |
16228 次 |
| 最近记录: |