golang:cgo extern无法正常工作

Jay*_*ani 3 go cgo

我正在尝试使用以下示例为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()
}
Run Code Online (Sandbox Code Playgroud)

foo.c 文件:

#include "_cgo_export.h"
void ACFunction() {
    printf("ACFunction()\n");
    AGoFunction();
}
Run Code Online (Sandbox Code Playgroud)

运行此示例时,我收到以下错误:

# 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
Run Code Online (Sandbox Code Playgroud)

我无法追查这一点.为什么ACFunctionundefined?还是我错过了什么?

go version:go go go1.1.2 linux/386

Jam*_*dge 7

基于问题评论,您似乎正在尝试构建和运行该程序go run foo.go.

这失败并出现go run: cannot run non-main package错误,但将包名称转换为main并添加main函数确实会重现问题中的错误.这似乎是因为它试图只编译foo.go文件而不是编译伴随foo.c文件.

如果您将文件放在目录下$GOPATH/src并用于go build packagename构建程序,它应该成功构建程序包中的所有源文件.