交叉编译共享库



我想知道是否可能(如果是:如何(与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

有什么想法?

您面临的问题实际上不是关于编译共享库或可执行文件,而是关于使用CGO并尝试交叉编译。(尽管如此,如果您想要一个库,而不是可执行文件,则不应是main。(

交叉编译时,默认情况下禁用CGO。如果添加环境变量CGO_ENABLED=1,则您的示例将有效:

CGO_ENABLED=1 GOOS=darwin go build -o libdoubler.dylib -buildmode=c-shared doubler

请记住,在交叉编译时使用CGO会很麻烦。您将需要确保在主机机器上准备好目标平台的C库。如果不是真正必要的,请远离CGO。如果需要,则可以考虑在目标机器上进行编译,而不是处理与CGO进行交叉编译的维护。

构建客户使用时:

package main 

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

package mylibname

最新更新