交叉编译共享库

时间:2017-04-30 20:25:43

标签: go shared-libraries cross-compiling

我想知道是否有可能(如果是的话:如何)与Go交叉编译共享库。说我有这段代码:

package main

import "C"

//export DoubleIt
func DoubleIt(x int) int {
    return x * 2
}

func main() {}
src/doubler/main.go中的

。在Mac上我可以运行

go build -o libdoubler.dylib -buildmode=c-shared doubler

获取名为libdoubler.dylib的共享库。类似于Linux,只有扩展名.so

现在我想使用Linux作为构建我的库(适用于Mac和Windows)的主要平台。我有什么选择?

GOOS设置为darwin并在linux上运行上述内容,

can't load package: package doubler: no buildable Go source files in /home/patrick/Desktop/go/src/doubler

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

您遇到的问题实际上并不是关于编译共享库或可执行文件,而是关于使用cgo并尝试交叉编译。 (但是,如果你想要一个库,而不是一个可执行文件,那么包名不应该是CGO_ENABLED=1。)

交叉编译时,默认情况下禁用cgo。如果添加环境变量CGO_ENABLED=1 GOOS=darwin go build -o libdoubler.dylib -buildmode=c-shared doubler ,那么您的示例将起作用:

{{1}}

请记住,在交叉编译时使用cgo会很麻烦。您需要确保目标平台的C库已在主机上准备就绪。如果没有必要,请远离cgo。如果必须,那么您可以考虑在目标机器上进行编译,而不是使用cgo来处理交叉编译的维护。

答案 1 :(得分:0)

构建客户端时使用:

package main 

...但建立图书馆使用:

package mylibname