cgo:从位于某个包中的C函数调用到另一个包

时间:2016-02-12 05:18:02

标签: go

我正在尝试按照指南来组织我的代码,并且应该通过该工具检测和编译位于这些目录中的C文件。但是,当我尝试从另一个包引用一个函数(例如从foo调用bar)时,我收到以下错误:

ld: symbol(s) not found for architecture x86_64

目录和文件:

test/main.go

test/bar:
bar.c  bar.go bar.h

test/foo:
foo.c  foo.go foo.h

bar.h:

extern void bar();

bar.c:

#include <stdio.h>

void bar() {
  printf("bye\n");
}

bar.go:

package bar

//#include "bar.h"
import "C"

func Bar() {
    C.bar()
}

foo.h中:

extern void foo();

foo.c的:

#include <stdio.h>

#include "../bar/bar.h"

void foo() {
  printf("hello\n");
  bar();
}

foo.go:

package foo

//include "foo.h"
//include "../bar/bar.h"
import "C"

func Foo() {
    C.foo()
}

main.go:

package main

import "github.com/user/test/foo"
import "github.com/user/test/bar"


func main() {
  foo.Foo()
  bar.Bar()
}

输出:

cd test ; go build     
# github.com/user/test/foo
Undefined symbols for architecture x86_64:
  "_bar", referenced from:
      _foo in foo.o
ld: symbol(s) not found for architecture x86_64

0 个答案:

没有答案