go 工具链目前[不支持编译 windows 下的动态链接库]解决方案

Posted davygeek

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 工具链目前[不支持编译 windows 下的动态链接库]解决方案相关的知识,希望对你有一定的参考价值。

go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]。
想要产生dll,可以这样 workaround ,参考 golang [issuse#11058][1]:

    • 首先得装一个 windows 下的 gcc 开发环境,我用了 [msys2][3] 。
    • 需要配置一个快点的源,我用[中国科技大学的源][4]。
    • 安装 gcc 工具链: pacman -S mingw-w64-x86_64-toolchain (注意这里有个坑, msys64 根目录有两个 mingw64.* 文件会导致 pacman 安装失败,我是暴力重命名了冲突的文件。)
    • 编译静态链接库: go build -buildmode=c-archive -o libfoo.a foo.go
    • 准备导出符号定义文件, Sum 就是需要导出的函数名:
      $ cat foo.def
      EXPORTS
          Sum
    • 用 gcc 把静态链接库转成动态链接库: gcc -m64 -shared -o foo.dll foo.def libfoo.a -Wl,--allow-multiple-definition -static -lstdc++ -lwinmm -lntdll -lWs2_32

 

[1] https://github.com/golang/go/issues/11058
[2] https://github.com/golang/go/issues/13494
[3] http://msys2.github.io/
[4] https://lug.ustc.edu.cn/wiki/mirrors/help/msys2

以上是关于go 工具链目前[不支持编译 windows 下的动态链接库]解决方案的主要内容,如果未能解决你的问题,请参考以下文章

Go学习

如何编译可以在Windows下运行的带有Python支持的ARM Linux GDB

Go语言环境安装详细介绍

Go语言中的打包和工具链

关于Linux上的arm-linux交叉编译工具链的问题:但是arm也有很多种啊! 这个工具是对所有的ARM都支持吗?

Windows系统中搭建Go语言开发环境详解