我正在尝试使用以下示例为golang运行cgo(在go-wiki -> Global Functions处给出):
foo.go
档案:
package gocallback
import "fmt"
/*
#include <stdio.h>
extern void ACFunction();
*/
import "C"
//export AGoFunction
func AGoFunction() {
fmt.Println("AGoFunction()")
}
func Example() {
C.ACFunction()
}
foo.c
档案:
#include "_cgo_export.h"
void ACFunction() {
printf("ACFunction()\n");
AGoFunction();
}
运行此示例时,我收到以下错误:
# command-line-arguments
/tmp/go-build770916112/command-line-arguments/_obj/foo.cgo2.o: In function `_cgo_3234419c4c2a_Cfunc_ACFunction':
./foo.go:36: undefined reference to `ACFunction'
collect2: ld returned 1 exit status
我无法追查这一点。为什么ACFunction
是undefined
?或者我错过了什么?
go version
:
去版本go1.1.2 linux / 386
答案 0 :(得分:7)
根据问题评论,您似乎尝试使用go run foo.go
构建并运行该程序。
此操作失败并显示go run: cannot run non-main package
错误,但将包名称转换为main
并添加main
函数确实会重现问题中的错误。这似乎是因为它试图只编译foo.go
文件而不是编译伴随foo.c
文件。
如果您将文件放在$GOPATH/src
下的目录中并使用go build packagename
来构建程序,它应该成功构建程序包中的所有源文件。