簡體   English   中英

無法從 MacOS 交叉編譯 Golang 庫 Linux

[英]Unable to cross compile Golang library from MacOS for Linux

閱讀文章后,我嘗試了這個:

env GOOS=linux GOARCH=amd64 go build -buildmode=c-shared -o hello.so testlib.go

它給出了一個錯誤:

go: no Go source files

然后我通過這樣做啟用了 CGO:

env GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -buildmode=c-shared -o hello.so testlib.go

它給出了一組錯誤:

env GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -buildmode=c-shared -o hello.so testlib.go
# runtime/cgo
linux_syscall.c:67:13: error: implicit declaration of function 'setresgid' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
linux_syscall.c:67:13: note: did you mean 'setregid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:593:6: note: 'setregid' declared here
linux_syscall.c:73:13: error: implicit declaration of function 'setresuid' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
linux_syscall.c:73:13: note: did you mean 'setreuid'?
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/unistd.h:595:6: note: 'setreuid' declared here

以下是版本:

Go: go version go1.19.4 darwin/amd64

GCC:

=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

從 macOS 交叉編譯時,無法使用 Xcode 的 clang 編譯器。 您需要一個可以生成 Linux 個對象的編譯器。 這可以通過安裝基於 musl 的 GCC macOS-to-Linux 交叉編譯器來完成:

brew install filosottile/musl-cross/musl-cross

之后你仍然需要相應地設置 CC,所以命令行看起來像這樣:

GOOS=linux GOARCH=amd64 CGO_ENABLED=1 CC="x86_64-linux-musl-gcc" go build -buildmode=c-shared -o hello.so testlib.go

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM