我试图找到一个使用C中的Go代码工作的最小例子,例如this。我正在努力解决以下编译错误消息:
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
或
go build -buildmode=c-shared -o example.dylib main.go
或
GOARCH=amd64 go build -buildmode=c-shared -o LibraryLinkExamples.dylib main.go
操作系统是OS X 10.11,Go版本是go version
,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;
}
当我构建库并在同一操作系统甚至计算机上使用它时,我不明白为什么我得到“哪个不是正在链接的体系结构(x86_64)”错误消息?什么可以解释这个?
更新 在官方文档here中,它说:
amd64(也称为x86-64)
意味着应该与此设置兼容x86-64。它不是go build
中的错误?