golang:cgo extern无法正常工作

I am trying to run cgo for golang with following example (given at go-wiki -> Global Functions):

foo.go file:

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 file:

#include "_cgo_export.h"
void ACFunction() {
    printf("ACFunction()
");
    AGoFunction();
}

While running this example, I am getting following error:

# 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

I am not able to trace this down. Why ACFunction is undefined? or Am I missing something?

go version: go version go1.1.2 linux/386

cgo
douxing5199
douxing5199 嗯。那就是问题所在。跑步不起作用。gobuildpackagename可以正常工作。感谢您的指导。
接近 7 年之前 回复
douyun3887
douyun3887 我用gobuildpackagename。我在Linux/amd64上测试了1.1.2和1.2版本。
接近 7 年之前 回复
doujimiao7480
doujimiao7480 不,我尚未删除任何代码。那部分也让我感到困惑。您如何编译cgo?我正在使用gorunfoo.go。是否需要特定的gcc版本或32位/64位计算机或其他任何版本?
接近 7 年之前 回复
dotwc62080
dotwc62080 您的简化示例似乎对我来说还可以。不过,您的foo.go文件没有36行,因此您删除的某些代码中是否可能存在错误?
接近 7 年之前 回复

1个回答



根据问题注释,您似乎正在尝试使用 go run foo.go <来构建和运行程序。 / code>。</ p>

此操作失败,并出现 go run:无法运行非主程序包</ code>错误,但将程序包名称转换为 main </ code> >并添加 main </ code>函数确实会重现问题中的错误。 这似乎是因为它试图仅编译 foo.go </ code>文件,而不是编译随附的 foo.c </ code>文件。</ p>

如果改为将文件放在$ code_ $ GOPATH / src </ code>下的目录中,并使用 go build packagename </ code>生成程序,则它将成功生成程序包中的所有源文件。 </ p>
</ div>

展开原文

原文

Based on the question comments, it seems that you were trying to build and run the program with go run foo.go.

This fails with a go run: cannot run non-main package error, but converting the package name to main and adding a main function does reproduce the error in the question. This seems to be because it is trying to compile only the foo.go file and not the companion foo.c file.

If you instead place the files in a directory under $GOPATH/src and use go build packagename to build the program, it should successfully build all the source files in the package.

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐