我的目标是能够从Cocoa项目调用Go函数,但我刚开始使用纯C CoreFoundation项目。
这是我的简单包:
package hello
import "C"
import (
"fmt"
)
//export SayHello
func SayHello() {
fmt.Println("Hello, World!")
}
我使用生成lib go install
的{{1}}来构建它
我希望能够将此库链接到我的CoreFoundation项目,以便我可以从我的C代码中调用hello.a
。
这样做会导致Xcode显示一条警告,指出SayHello
被忽略了,因为它不是为X86_64架构构建的。
我可以说这个问题很可能是因为编写Go代码的方式与XCode编译CoreFoundation项目的方式不兼容。
因此我的问题是:是否有可能以某种方式编译我的Go包以便与我的CoreFoundation项目链接?
答案 0 :(得分:1)
您无法将Go库链接到C程序。输出的* .a存档与C对象文件的格式不同,因此C编译器不知道如何链接它们。
* .a文件遵循此处描述的格式:http://golang.org/cmd/pack/和此处:http://plan9.bell-labs.com/magic/man2html/1/ar
CGO允许C调用go函数,反之亦然,但这将要求主应用程序为Go二进制而不是C二进制,以便链接正常工作。