首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >葛朗: cgo外挂不起作用

葛朗: cgo外挂不起作用
EN

Stack Overflow用户
提问于 2013-12-11 06:46:32
回答 1查看 3.5K关注 0票数 3

我试图用下面的示例(在go-wiki -> Global Functions上给出)来运行golang的cgo:

foo.go文件:

代码语言:javascript
代码运行次数:0
运行
复制
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文件:

代码语言:javascript
代码运行次数:0
运行
复制
#include "_cgo_export.h"
void ACFunction() {
    printf("ACFunction()\n");
    AGoFunction();
}

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

代码语言:javascript
代码运行次数:0
运行
复制
# 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

我无法追踪这件事。为什么ACFunctionundefined?还是我漏掉了什么?

go version:go版本go1.1.2linux/386

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 08:36:30

根据问题的注释,您似乎正在尝试用go run foo.go构建和运行程序。

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

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

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20512353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档