golang跨平台编译的问题

golang跨平台编译问题

这好像是第好几次出现了。没法,还是得写一下记录一下。

在macOS上编译linux的时候,以前都是正常的,但是可能升级到了新的macOS版本导致的问题,其中的CommandLineTools也已经更新到了新的版本,但是没用。

情况就是当在macOS上编译linux可执行文件的时候:

CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o example example.go

会出现下面的错误:

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'?

解决办法

这个问题的解决办法是:

  1. 安装musl-cross
brew install FiloSottile/musl-cross/musl-cross
brew info musl-cross
  1. 重新编译
GOOS=linux CC="x86_64-linux-musl-gcc" GOARCH=amd64 CGO_ENABLED=1 go build -o example example.go
  1. 上传到linux服务器后,给对应的linux服务器安装musl-tools
    • Ubuntu
       sudo apt-get update
       sudo apt-get install musl
      
    • CentOS
       wget https://copr.fedorainfracloud.org/coprs/ngompa/musl-libc/repo/epel-7/ngompa-musl-libc-epel-7.repo -O /etc/yum.repos.d/ngompa-musl-libc-epel-7.repo
       yum install -y musl-libc-static
      
  2. 运行

这时候,就可以在linux服务器上运行了。

| 访问量:
Table of Contents