我在Go中编写了一个非常小的应用程序,并将AWS Linux AMI配置为主机。该应用程序是一个非常简单的Web服务器。我已经按照信函的官方文档中的说明在Linux VM上安装了Go。使用“go run main.go
”命令调用时,我的应用程序按预期运行。在Linux中运行Google Go二进制文件的无效参数
但是,当我尝试手动启动由于运行“go install
”而生成的二进制文件时,收到“无效参数”错误。相反,如果我运行“go build
”(我的理解基本上是相同的,只有一些例外),然后调用生成的二进制文件,应用程序将按预期启动。
我从$GOPATH/bin/
文件夹中调用该文件,如下所示:
./myapp
我还添加$GOPATH/bin
到$PATH
变量。 我也将$GOPATH/bin/
中的二进制文件移动到src
文件夹,并从那里成功运行。
Linux实例是一个64位实例,并且我已经安装了相应的Go 64位安装。
可能不相关(它必须是一些Go的东西构建错误的可执行文件格式):有相当多的错误来自linux并且很难识别:例如,如果可执行格式是ELF,但它没有指定ld.so(ld-linux.so)入口点正确,错误将是“未找到文件”。无论如何,在你的二进制文件上运行ldd以查看它是否正常。 –
从ldd输出:linux-vdso.so.1 =>(0x00007ffd50dbb000) libpthread.so.0 => /lib64/libpthread.so.0(0x00007f6a5dc87000) libc.so.6 => /lib64/libc.so.6(0x00007f6a5d8c6000) /lib64/ld-linux-x86-64.so.2(0x00007f6a5dea9000) –
尝试在错误的可执行文件上运行strace。它会显示你的程序运行的所有系统调用。所有库将读取并显示在系统调用中。阅读输出以找出失败的原因。 –