1

我的目标是能够从 Cocoa 项目中调用 Go 函数,但我刚开始使用纯 C CoreFoundation 项目。

这是我的简单 go 包:

package hello

import "C"

import (
    "fmt"
)

//export SayHello
func SayHello() {
    fmt.Println("Hello, World!")
}

我使用go install生成 lib来构建它hello.a
我希望能够将此库链接到我的 CoreFoundation 项目,以便我可以SayHello从我的 C 代码中调用。

这样做会导致 Xcode 显示一条警告,指出该警告已hello.a被忽略,因为它不是为 X86_64 架构构建的。

我可以说这个问题很可能是由于 Go 代码的编译方式与 XCode 编译 CoreFoundation 项目的方式不兼容。

因此我的问题是:是否有可能以某种方式编译我的 Go 包以与我的 CoreFoundation 项目链接?

4

1 回答 1

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

于 2013-07-05T05:00:59.690 回答