我正在尝试从 C 程序调用 Go 函数。我已经从我的 Go 源代码构建了一个静态库,但是 ld 无法找到我想要从 C 程序调用的函数。
前往代码:
package main
import "fmt"
import "C"
// (this can be called anything)
// export goCallbackHandler
func goCallbackHandler() C.int {
i := Hello()
return C.int(i)
}
func Hello() int {
fmt.Println("Hello, world!")
return 0
}
func main() {
}
C代码: (主要.c)
#include "binding.h"
int main() {
// Call the function from the binding
return goCallbackHandler();
}
(绑定.h)
extern int goCallbackHandler();
我可以使用
go build -o libhello.a -buildmode=c-archive hello.go
成功构建库。然而,当我尝试使用 gcc -o hello main.c -L. -lhello
构建 C 部分时,我收到错误
main.c:(.text+0xe): undefined reference to `goCallbackHandler'
collect2: error: ld returned 1 exit status
来自
ld
空格很重要:导出注释需要是
//export
,而不是 // export
。您的版本实际上不导出任何内容。将导出注释固定为 //export goCallbackHandler
后,它按预期工作。