无法使用使用“Go”代码编译的C库;“去建造”;

无法使用使用“Go”代码编译的C库;“去建造”;,c,go,C,Go,我试图获得一个在C中使用Go代码工作的最小示例,例如。我正在处理以下编译错误消息: ld:警告:忽略文件 /Users/username/gocode/src/example/example.dylib,文件是为 不是要链接的体系结构的存档(x86_64): /Users/username/gocode/src/example/example.dylib 我的尝试如下。我在main.Go文件中有一个简单的Go包: package example import "C" //export GoE

我试图获得一个在C中使用Go代码工作的最小示例,例如。我正在处理以下编译错误消息:

ld:警告:忽略文件 /Users/username/gocode/src/example/example.dylib,文件是为 不是要链接的体系结构的存档(x86_64): /Users/username/gocode/src/example/example.dylib

我的尝试如下。我在main.Go文件中有一个简单的Go包:

package example

import "C"

//export GoEcho
func GoEcho(s *C.char) string {
    return C.GoString(s)
}

func main() {}
然后我使用

go build -buildmode=c-archive -o example.dylib main.go

操作系统是OS X 10.11,正如
Go version
所说,Go版本是
go1.9 darwin/amd64

我使用的C代码如下所示:

#include "example.h"
#include <stdio.h>

int main(int argc, char const *argv[])
{
    GoString res = GoEcho("test");
    printf("%.*s\n", (int)res.n, res.p);
    return 0;
}
#包括“example.h”
#包括
int main(int argc,char const*argv[]
{
GoString res=GoEcho(“测试”);
printf(“%.*s\n”,(int)res.n,res.p);
返回0;
}
我不明白为什么在构建库并在同一操作系统(甚至是计算机)上使用它时,会收到“哪不是要链接的体系结构(x86_64)”错误消息?什么能解释这一点

更新 官方文件中说:

amd64(也称为x86-64)


这意味着它应该与此设置兼容。这可能是
go build

中的一个bug。根据公认的答案,您可能有一个比特问题。它们可能是在同一台机器上生成的,但每个刀具链的默认位可能不同。@jwdonahue“刀具链”是在同一台机器上生成的Go build和Xcode。我看不出有什么不同的原因。我就坐在角落里生锈。@jwdonahue你可能是对的,我会调查的,我只是感到惊讶。感谢您的帮助。@jwdonahue我已更新了一个新的尝试,其中我使用
GOARCH=amd64
指定了体系结构。如果我理解正确,amd64是x86_64(最初称为x86-64,但后来改名为amd64)。但是,它仍然不起作用。根据公认的答案,您可能有比特问题。它们可能是在同一台机器上生成的,但每个刀具链的默认位可能不同。@jwdonahue“刀具链”是在同一台机器上生成的Go build和Xcode。我看不出有什么不同的原因。我就坐在角落里生锈。@jwdonahue你可能是对的,我会调查的,我只是感到惊讶。感谢您的帮助。@jwdonahue我已更新了一个新的尝试,其中我使用
GOARCH=amd64
指定了体系结构。如果我理解正确的话,amd64是x86_64(最初称为x86-64,但后来改名为amd64)。但是,它仍然不起作用。
GOARCH=amd64 go build -buildmode=c-shared -o LibraryLinkExamples.dylib main.go
#include "example.h"
#include <stdio.h>

int main(int argc, char const *argv[])
{
    GoString res = GoEcho("test");
    printf("%.*s\n", (int)res.n, res.p);
    return 0;
}