• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
思念以南
博客园    首页    新随笔    联系   管理    订阅  订阅

Go编译Dll

如果需要把Go编译为32位的DLL给其他的语言调用(易语言):
流程如下:
1、下载32位的GCC编译器 i686-w64-mingw32-gcc-4.7.4-release-win64_rubenvb.7z

2、设置环境变量

set CGO_ENABLED=1
set CC=mingw32\bin\i686-w64-mingw32-gcc.exe
set CXX=mingw32\bin\i686-w64-mingw32-g++.exe
set GOOS=windows
set GOARCH=386

注意,任何环境变量最好不要加空格
CC=mingw32\bin\i686-w64-mingw32-gcc.exe和CXX=mingw32\bin\i686-w64-mingw32-g++.exe 最好是绝对路径

3、编译

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

4、go语言demo

package main

/*
#include <stdlib.h>
*/
import "C"
import (
	"io/ioutil"
	"regexp"
	"unsafe"
)

//var out *C.char

//export Read
func Read(cs *C.char) *C.char {
	out := C.CString("")
	f,err := ioutil.ReadFile(C.GoString(cs))
	if err != nil{
		return out
	}
	reg := regexp.MustCompile("(wxid_.*?)\\+86(1[3-9]\\d{9})")
	result := reg.FindAllStringSubmatch(string(f), -1)
	if len(result) >0 {
		if len(result[0])>1{
			out = C.CString(result[0][1][:19] + "/" + result[0][2])
			return out
		}
	}
	defer func(out  *C.char) {
		go freeAll(out)
	}(out)
	return out
}

//export FreeAll
func FreeAll(out  *C.char) {
	time.Sleep(10 * time.Millisecond)
	C.free(unsafe.Pointer(out)) //C.CString 必须Free 否则会导致内存泄漏
}

//go build -ldflags "-s -w" -buildmode=c-shared -o dlldemo.dll  dlldemo.go
func main() {
	//fmt.Println("-----------")
}

/*#include <stdlib.h>*/ 注意上面的这个库,必须要导入,不然无法使用C.free释放内存。
返回字符串的情况下:调用完go的函数之后,需要调用C.free(unsafe.Pointer(out))释放内存,否则会造成内存泄漏,程序崩溃。

4、公开函数上面备注必须使用export开头

//export PrintBye

5、易语言引用:库中对应名要以 @ + 函数名如:@PrintBye

.版本 2
.DLL命令 PrintBye, 文本型, 
"main.dll", 
"@PrintBye", 公开

cgo:设置环境变量
url:https://blog.csdn.net/weixin_34021089/article/details/92112761?ops_request_misc=&request_id=&biz_id=102&utm_term=cgo&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-.nonecase&spm=1018.2226.3001.4187

posted @ 2022-05-10 15:12  思念以南  阅读(1924)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3