go 工具鏈目前[不支持編譯 windows 下的動態連接庫]解決方案

go 工具鏈目前[不支持編譯 windows 下的動態連接庫][1],不過[支持靜態連接庫][2]。
想要產生dll,能夠這樣 workaround ,參考 golang [issuse#11058][1]:python

    • 首先得裝一個 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/msys2c++

相關文章
相關標籤/搜索