我正在用 Go 编写一个库,我想将其导出到 c 共享库。p0它工作得很好,但是我发现导出的标头使用, p1, p2,...作为参数名称而不是 Go 中的原始参数名称有点烦人。有没有办法改变这种行为,或者我只是坚持这样做?
我在用go version go1.12.7 darwin/amd64
例子:
package main
/*
#import <stdlib.h>
*/
import "C"
import (
"fmt"
)
func main() {}
//export MyFunc
func MyFunc(input *C.char) {
fmt.Println(C.GoString(input));
}
go build -o libout.so -buildmode=c-shared
输出:
extern void MyFunc(char* p0);
为什么没有p0
点名input
?
Go 函数可以通过以下方式导出以供 C 代码使用:
//export MyFunction
func MyFunction(arg1, arg2 int, arg3 string) int64 {...}
//export MyFunction2
func MyFunction2(arg1, arg2 int, arg3 string) (int64, *C.char) {...}
它们在 C 代码中的形式如下:
extern int64 MyFunction(int arg1, int arg2, GoString arg3);
extern struct MyFunction2_return MyFunction2(int arg1, int arg2, GoString arg3);
然而,当我编译它给出的确切代码时,我得到这个结果:
extern GoInt64 MyFunction(GoInt p0, GoInt p1, GoString p2);
extern struct MyFunction2_return MyFunction2(GoInt p0, GoInt p1, GoString p2);
为什么参数没有名字?
慕容森
相关分类