加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang:cgo extern无法正常工作

发布时间:2020-12-16 09:22:02 所属栏目:大数据 来源:网络整理
导读:我试图使用以下示例运行gogo for golang(在 go-wiki - Global Functions给出): foo.go文件: package gocallbackimport "fmt"/*#include stdio.hextern void ACFunction();*/import "C"//export AGoFunctionfunc AGoFunction() { fmt.Println("AGoFunction(
我试图使用以下示例运行gogo for golang(在 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未定义?还是我错过了什么?

去版本:
去版本go1.1.2 linux / 386

解决方法

根据问题评论,似乎你试图用go run foo.go构建和运行程序.

这运行失败:无法运行非主程序包错误,但将程序包名称转换为main并添加主函数确实会重现问题中的错误.这似乎是因为它试图只编译foo.go文件而不是编译伴随的foo.c文件.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读