在《Windows环境下将Go语言编译为DLL并供.Net调用》一文中,我们直接使用命令
1 |
go build -buildmode=c-shared -o exportgo.dll main.go |
导出的DLL文件会导出Go语言所有package中的public函数,这通常是不合适的。如有必要,我们可以利用DEF文件导出指定的函数。
首先生成main.a静态链接库:
1 |
go build -buildmode=c-archive main.go |
然后编写DEF文件:
1 2 3 |
EXPORTS PrintBye Sum |
DEF文件以EXPORTS开头,第二行开始每行一个导出函数名称,与Go源文件中带有//export注释的导出函数相对应。
然后用GCC生成DLL文件:
1 |
gcc test.def main.a -shared -lwinmm -lWs2_32 -o test.dll -Wl,--out-implib,test.lib |
执行成功后会在当前目录生成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函数
没得用,通不过
Cannot export Test: symbol not defined
collect2.exe: error: ld returned 1 exit status