我已经在我的manjaro linux上使用go版本“ go1.11.5 linux / amd64”对其进行了配置。以下程序内置于二进制文件中,该二进制文件可直接在我的go文件夹和主文件夹中使用。
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
一旦它在我的本地系统上运行,我决定使用ftp将这个二进制文件上传到远程ubuntu 18.04服务器。我已将二进制文件复制到服务器主文件夹中。 chmod 755使其可执行。 chown将用户更改为服务器的当前登录用户。在服务器上安装了go版本“ go1.11 linux / amd64”。当我尝试执行二进制文件时,出现以下异常
Segmentation fault
让我知道要完成这项工作还需要分享什么。我还有另一个用gin和许多其他软件包构建的项目。我需要将该二进制文件配置为在同一台服务器上提供api。既然那行不通,我决定使用这个死掉的简单二进制文件,令我惊讶的是这行不通。
让我发布本地和远程系统的环境。
go env on local
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/najam/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/najam/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build859876677=/tmp/go-build -gno-record-gcc-switches"
在Ubuntu服务器上进入环境
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/myuser/.cache/go-build"
GOEXE=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/myuser/go"
GOPROXY=""
GORACE=""
GOROOT="/usr/local/go"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GCCGO="gccgo"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build276202541=/tmp/go-build -gno-record-gcc-switches"
答案 0 :(得分:2)
因此,在golang懒散的家伙的帮助下。 我使用
构建CGO_ENABLED=0 GOOS=linux go build -o najamgo hello.go
在我使用
之前go build hello.go
然后,由于我使用的是ftp,因此不得不将传输类型从“ auto或acscii”更改为“ binary”。然后从那时起,只需在上传的文件上使用chmod使其可执行即可。
sudo chmod 755 hello
最终执行二进制文件。
./hello
及其工作。