大道至简,知易行难
广阔天地,大有作为

避免Go语言导出DLL文件中包含所有package的public函数

在《Windows环境下将Go语言编译为DLL并供.Net调用》一文中,我们直接使用命令

导出的DLL文件会导出Go语言所有package中的public函数,这通常是不合适的。如有必要,我们可以利用DEF文件导出指定的函数。

首先生成main.a静态链接库:

然后编写DEF文件:

DEF文件以EXPORTS开头,第二行开始每行一个导出函数名称,与Go源文件中带有//export注释的导出函数相对应。
然后用GCC生成DLL文件:

执行成功后会在当前目录生成test.dll和test.lib文件。此时,再次使用dumpbin查看,会发现DLL文件仅导出了指定的函数:

只导出了指定的函数

只导出了指定的函数

参考资料:
1、https://github.com/Baozisoftware/go-dll/wiki/%E7%94%9F%E6%88%90Go%E7%89%88DLL

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » 避免Go语言导出DLL文件中包含所有package的public函数

分享到:更多 ()

评论 1

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #1

    没得用,通不过
    Cannot export Test: symbol not defined
    collect2.exe: error: ld returned 1 exit status

    九哥4年前 (2021-01-25)回复