【发布时间】:2013-12-29 00:36:48
【问题描述】:
我正在尝试使用以下示例为 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
【问题讨论】:
-
您的精简示例似乎对我来说可以编译。您的
foo.go文件没有 36 行,那么您删除的某些代码中是否可能存在错误? -
不,我没有删除任何代码。那行部分也让我感到困惑。你如何编译cgo?我正在使用
go run foo.go。是否需要任何特定的 gcc 版本或 32 位/64 位机器或任何东西? -
我使用了
go build packagename。我在 Linux/amd64 上测试了 1.1.2 和 1.2 版本。 -
嗯。这就是问题所在。
go run不起作用。go build packagename按预期工作。感谢您的指点。