我正在尝试按照指南来组织我的代码,并且应该通过该工具检测和编译位于这些目录中的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