我创建了一个golang
程序,以将一些值传递给c
程序。
I used this example to do so
我简单的golang代码:
package main
import "C"
func Add() int {
var a = 23
return a
}
func main() {}
然后我使用
go build -o test.so -buildmode=c-shared test.go
我的C代码:
#include "test.h"
int *http_200 = Add();
当我尝试使用gcc -o test test.c ./test.so
我知道
int * http_200 = Add(); ^ http_server.c:75:17:错误:初始化元素不是恒定的
为什么我会收到此错误?如何在我的C代码中正确初始化该变量。
PS:在第一次评论后进行编辑。
答案 0 :(得分:3)
这里有几个问题。首先是类型的不兼容。 Go将返回GoInt。第二个问题是必须导出Add()
函数以获取所需的头文件。如果您不想更改Go代码,那么在C语言中,您必须使用GoInt
的{{1}}。
一个完整的例子是:
test.go
long long
test.c
package main
import "C"
//export Add
func Add() C.int {
var a = 23
return C.int(a)
}
func main() {}
然后编译并运行:
#include "test.h"
#include <stdio.h>
int main() {
int number = Add();
printf("%d\n", number);
}
23
使用go build -o test.so -buildmode=c-shared test.go
gcc -o test test.c ./test.so &&
./test
的第二个示例:
test.go
GoInt
test.c
package main
import "C"
//export Add
func Add() int { // returns a GoInt (typedef long long GoInt)
var a = 23
return a
}
func main() {}
然后编译并运行:
#include "test.h"
#include <stdio.h>
int main() {
long long number = Add();
printf("%lld\n", number);
}
23