如何在Xcode CoreFoundation项目中链接go包?

时间:2013-07-04 19:24:37

标签: go

我的目标是能够从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项目链接?

1 个答案:

答案 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二进制,以便链接正常工作。