Files
2026-05-27 23:03:00 +08:00

610 B

简介

输出gcl中的功能为C库

步骤:

  • lib.go中编写要输出的函数:
//export Sm3
func Sm3(in []byte, out []byte) {
	d := sm3.Sum(in)
	copy(out, d[:])
}
  • 生成go导出的C库(c-archive)
go build -buildmode=c-archive -o libgcl_go.a lib.go
  • lib.c中编写C包装代码
int sm3(void *data, int dataLen, void *digest){
    // input check, omit

    GoSlice in = {
        data, dataLen, dataLen
    };
    GoSlice out = {
        digest, 32, 32
    };
    Sm3(in,out);
    return 0;
}
  • gcc编译gcl.c为动态库
gcc -shared -o libgcl.dylib -L. -lgcl_go gcl.c