Go导出的库给VS使用

说明:go在windows下可以导出静态库和动态库,静态库是.a文件是不能给vs使用的,也没法转成vs使用的静态库。动态库(C++导出的动态库也是不行的,因为C++重载函数的存在使得不同编译器函数改名不一致,所以dll不具有二进制级别的共享性,参考资料)是可以给VS使用的,但是windows下使用需要头文件、lib文件和dll文件,接下来只需要将dll文件生成lib文件即可。

使用步骤

  1. go build生成dll文件和.h文件:

go build -ldflags "-s -w" -buildmode=c-shared -o xxx.dll

如果要生成32位的dll,交叉编译不支持CGO,windows32位系统下又可能不支持编译dll,需要用gcc将静态库转成动态库(安装32位mingw编译器),命令如下


go build -ldflags "-s -w" -buildmode=c-archive -o xxx.a

ar x xxx.a

gcc -shared -o xxx.dll *.o -lwinmm -lntdll -lWs2_32

  1. 编写def文件, 写上需要导出使用的函数名:

EXPORTS

    DownloadRes

    GetCurrentDownloadSize

    GetDownloadSpeed

    GetDownloadState

    GetTotalDownloadSize

    InitClient

    StartClient

    StopClient

也可以使用VS安装目录提供的dumpbin工具生成def文件,dumpbin工具在VS的安装目录的VC\bin\dumpbin.exe, 使用命令dumpbin.exe /exports xxx.dll > xxx.def生成def文件,不过需要修改成def模板格式。

  1. 使用lib工具将def文件生成lib文件,lib工具在VS目录下的VC\bin\lib.exe,使用命令lib.exe /machine:X64 /def:xxx.def生成lib文件(32位则用/machine:X86)。至此已经得到头文件,lib文件和dll文件。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容