编译环境
- go1.20
- MingW交叉编译器 mingw-w64
apt install mingw-w64
- ARM交叉编译器
apt install gcc-aarch64-linux-gnu
Windows编译指令
windows:
CGO_ENABLED=1 \
GOOS=windows \
GOARCH=amd64 \
CC=x86_64-w64-mingw32-gcc \
go build \
-buildmode=c-shared \
-o build/bin/windows/${OutAppName}.dll
windows-32:
CGO_ENABLED=1 \
GOOS=windows \
GOARCH=386 \
CC=i686-w64-mingw32-gcc \
go build \
-buildmode=c-shared \
-o build/bin/windows/x86/${OutAppName}.dll
Linux编译指令
linux-arm64:
CGO_ENABLED=1 \
GOOS=linux \
GOARCH=arm64 \
CC=aarch64-linux-gnu-gcc \
go build \
-buildmode=c-shared \
-o build/bin/linux/arm64/lib${OutAppName}.so
linux-amd64:
CGO_ENABLED=1 \
GOOS=linux \
GOARCH=amd64 \
go build \
-buildmode=c-shared \
" \
-o build/bin/linux/amd64/lib${OutAppName}.so
导出函数
package main
import "C"
import (
"fmt"
"unsafe"
)
func Version(outstr *C.char, outlen *C.int) C.int {
bytOut := []byte(version.Version)
*outlen = C.int(len(bytOut))
bytOutStr := (*[128]byte)(unsafe.Pointer(outstr))
copy((*bytOutStr)[:*outlen], bytOut)
return 0
}
func GetSysCode(custname *C.char, outstr *C.char, outlen *C.int) C.int {
sou := ""
syscode, err := GetSysCode(C.GoString(custname))
if err != nil {
sou = fmt.Sprintf("取特征码失败,%v", err)
return setOutStr(301, sou, outstr, outlen)
}
sou = syscode
return setOutStr(0, sou, outstr, outlen)
}
func setOutStr(retcode int, in string, outstr *C.char, outlen *C.int) C.int {
sou := in
if int(*outlen) <= len(sou) {
sou = fmt.Sprintf("At least %d bytes buffer are required.", len([]byte(sou))+1)
bytOut := []byte(sou)
bytOut = append(bytOut, 0)
*outlen = C.int(len(bytOut))
bytOutStr := (*[409600]byte)(unsafe.Pointer(outstr))
copy((*bytOutStr)[:*outlen], bytOut)
return 101
}
bytOut := []byte(sou)
bytOut = append(bytOut, 0)
*outlen = C.int(len(bytOut))
bytOutStr := (*[409600]byte)(unsafe.Pointer(outstr))
copy((*bytOutStr)[:*outlen], bytOut)
return C.int(retcode)
}
windows动态库lib文件生成
LIBRARY
EXPORTS
IntAdd
GoPrint
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin)
lib /def:deffile.def /machine:x64 /out:libfile.lib
lib /def:deffile.def /machine:x86 /out:libfile.lib
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验