设为首页 收藏本站
查看: 1214|回复: 0

[经验分享] go 工具链目前[不支持编译 windows 下的动态链接库][1],不过[支持静态链接库][2]

[复制链接]
YunVN网友  发表于 2018-9-21 08:08:22 |阅读模式
  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从1.5开始就支持编译编译C调用的动态链接库
  

Shared libraries  

  
Go 1.5 can produce Go shared libraries that can be consumed by Go programs.
  

  
Build the standard library as shared libraries:
  

  
$ go install -buildmode=shared std
  
Build a "Hello, world" program that links against the shared libraries:
  

  
$ go build -linkshared hello.go
  
$ ls -l hello
  
-rwxr-xr-x 1 adg adg 13926 May 26 02:13 hello
  
Go 1.5 can also build Go programs as C archive files (for static linking) or shared libraries (for dynamic linking) that can be consumed by C programs.
  

  更多详细的用法可以参考
  golang.org/s/execmodes
  试试看 buildmode=c-archive 编译到 .a .h 包给 c 语言使用。。但是不支持 x86 只支持 amd64
  $ go install -buildmode=shared std
  -buildmode=shared not supported on windows/386
  不支持 Windows...
  https://gocn.io/question/205



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-599133-1-1.html 上篇帖子: linux go环境安装 下篇帖子: CentOS6 x64下编译TiDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表