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

原文地址:https://www.cnblogs.com/davygeek/p/10455605.html

时间: 2024-10-15 01:55:34

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

【已解决】Windows下 MySQL大小写敏感 解决方案及分析

Windows下 MySQL大小写敏感配置 [email protected] http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-3-27 最近在window系统下 操作Linux系统下创建的数据库,发现有些不对劲,比较了半天才发现是大小写敏感的问题造成的.网上搜索了一下,解决了这个问题,做个简明扼要的记录. 按照网上的说明: WINDOWS: 编辑MySQL安装目录下的my.ini 文件,在[mysqld]节下 添加 lower_case_table_n

MonoDeveloper在windows下中文显示解决方案

1. 编码改UTF8 2. 语言选Chinese - China 一般网上都只会说到上面的,但是下面这个设置才是关键 3. Fonts-Text Editor的字体改为用中文的字体,例如STXihei 10 搞定.

ActiveMQ在windows下启动失败解决方案

activemq.xml文件中的 <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.

嵌入式交叉工具链编译

读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台 (X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统.这种方法在异平台移植和嵌入式开发时非常有用.相对与交叉编译,平常做的编译叫本地编译,也 就是在当前平台编译,编译得到的程序也是在本地执行.用来编译这种跨平台程序的编译器就

自己制作ARM-Linux交叉工具链

学习嵌入式嘛,就得自己多动手,多实践.入门的话,自己配置开发环境,移植内核这些.开发环境就不说了,移植内核首先就得编译内核.就得有编译器.由于ARM cpu的体系结构与x86不一样.通常的做法就是在 x86 开发平台使用ARM交叉编译器来编译内核,再移植到开发板上.制作交叉工具链是个仔细的活,既繁琐又有难度.网上推荐的做法是新手使用别人制作好的工具链,等以后经验多了,再来仔细研究这个.不知道为什么我就硬着头皮上了,结果花了一个星期还是倒腾出来了,算是有收获.所以这篇博文就简单记录一下,内容不涉及

Go语言中的打包和工具链

包 所有Go语言的程序都会组织成若干组文件,每组文件被称为一个包.这样每个包的代码都可以作为很小的复用单元,被其他项目引用. 包名惯例 给包命名的惯例是使用包所在目录的名字.并不需要所有包的名字都与别的包不同,因为导入包时是使用全路径的,所以可以区分同名的不同包. main包 Go语言的编译程序会试图把这种名字的包编译为二进制可执行文件.所有用Go语言编译的可执行程序都必须有一个名为main的包. 命令和包 Go文档里经常使用命令(command)这个词来指代可执行程序,如命令行应用程序.这会让

记录windows下编译chromium,备忘

编译windows下chromium,时间:20170619, 官方地址:https://chromium.googlesource.com/chromium/src/+/master/docs/windows_build_instructions.md 一. 系统要求: 1. 64位机器,至少8GB的内存,推荐16GB以上.(我用的Win10 64位虚拟机,内存按照8G来的): 2. 至少100GB的硬盘存储空间,格式为NTFS.FAT32不支持大于4GB的文件,而在git下载时的文件可能会有

交叉工具链的用途及使用方法

交叉工具链.链即为集合,交叉工具链也就是交叉工具的集合.平时在电脑上写程序然后再进行编译链接等操作最后生成一个可执行程序,该文件都只能在X86架 构硬件上运行,而不能在我现在使用的开发板,也就是ARM架构上运行.所以进行ARM的裸机程序开发要有一套自己的工具.交叉工具链的安装和环境变量的配 置昨天学过了,现在已经忘得差不多了,但是以后会补上的.废话少说,下面开始记录今天学到的东西. 1.交叉编译器  顾名思义,就是将写好的C程序代码编译为ARM架构下的可执行文件.以前在电脑上使用的gcc,编译后

windows下如何配置实现命令行编译c++程序

大家知道在linux下编译c++代码的那种命令式的编译方式,想不想在windows下实现这样的功能?今天我就使用了我的windows台式电脑和笔记本电脑实现了这样的命令式的c++代码的编译. 首先你需要的工具就是: 1. 一台windows下的电脑(当然是安装了c++编译器的电脑) 2. 下载安装一个文本编辑器的软件(比如notepad等等) 下面是实现这样的功能的具体的步骤: 1. 首先要对系统的环境变量进行设置(具体环境变量的设置方式可以百度),主要的环境变量有三个:Lib,include,