我试图用下面的示例(在go-wiki -> Global Functions上给出)来运行golang的cgo:
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
:go版本go1.1.2linux/386
发布于 2013-12-11 00:36:30
根据问题的注释,您似乎正在尝试用go run foo.go
构建和运行程序。
如果出现go run: cannot run non-main package
错误,这将失败,但是将包名转换为main
并添加main
函数确实会在问题中再现错误。这似乎是因为它试图只编译foo.go
文件,而不是附带的foo.c
文件。
如果您将文件放在$GOPATH/src
下的目录中,并使用go build packagename
构建程序,那么它应该会成功地构建包中的所有源文件。
https://stackoverflow.com/questions/20512353
复制