我在Windows 10上安装了GO 1.7.我创建了测试程序,它在Windows中运行良好.下一步是尝试使用Ubuntu在我的docker虚拟机上运行它.
set GOARCH=amd64
set GOOS=linux
go tool dist install -v pkg/runtime
go install -v -a std
Run Code Online (Sandbox Code Playgroud)
我在cmd中运行第1行和第2行,没有问题.在第3行,我有一个错误
go tool dist: open C:\Go\src\pkg\runtime: The system cannot find the path specified.
Run Code Online (Sandbox Code Playgroud)
我手动检查这个文件夹,只有Windows的运行时
问题是我在哪里以及如何下载它?或者也许我正在做的是完全错误的方式......
更新09/02/2017
我按照建议跑了
set GOARCH=amd64
set GOOS=linux
go build -o "myapp"
Run Code Online (Sandbox Code Playgroud)
将此文件复制到共享文件夹后,将表单复制到另一个非共享文件夹(以避免此处描述的问题)并执行
root@7dd1655ae5db:/__notshared# ./myapp
bash: ./myapp: cannot execute binary file: Exec format error
Run Code Online (Sandbox Code Playgroud)
我下载文件包后检查了我的文件
root@7dd1655ae5db:/__notshared# file myapp
myapp: PE32+ executable (console) x86-64 (stripped to external PDB), for MS Windows
Run Code Online (Sandbox Code Playgroud)
似乎在构建期间没有创建linux可执行文件.
我发现了一个问题并解决了它。
在我的 Windows 10 中,这些命令
set GOARCH=amd64
set GOOS=linux
Run Code Online (Sandbox Code Playgroud)
在 cmd 和 powershell 控制台中实际上什么也没做!唯一的工作方式是我需要打开控制面板 -> 系统 -> 系统高级设置 -> 环境变量并手动添加它们。
如果您使用 Visual Studio Code 进行开发,请不要忘记重新启动它。
更新 24/02/2017
相反,您可以像这样在 windows powershell 中设置变量
$env:GOOS = "linux"
并将其读到控制台
$env:GOOS
另一个问题有点老了(从2013年开始)。
跨平台支持已经发展了很多,您所需要做的就是更改环境变量(GOARCH和GOOS)并运行go build。
导航到main程序包的文件夹,然后:
set GOARCH=amd64
set GOOS=linux
go build
Run Code Online (Sandbox Code Playgroud)
您可以像这样更改结果二进制文件的名称:
go build -o "myapp"
Run Code Online (Sandbox Code Playgroud)
请注意,在Linux中为Windows amd64编译应用程序,只需一个命令即可(在main软件包的文件夹中):
GOOS=windows GOARCH=amd64 go build
Run Code Online (Sandbox Code Playgroud)
博客文章:Dave Cheney:与Go 1.5交叉编译也证实了这一点:
要使用Go 1.5交叉编译Go程序,过程如下:
设置
GOOS并GOARCH作为目标操作系统和体系结构的值。跑
go build -v YOURPACKAGE
您不必也不应运行go install,因为那样会编译软件包并将其安装在您的中GOPATH,这通常是不需要的。进行交叉编译不是为了开发/测试您的应用程序和程序包。它是产生一个二进制文件,您将在另一台系统/计算机上运行它。
go build不会安装任何东西,只会生成可执行二进制文件。有关详细信息,请参阅构建什么版本?
在博客文章中也得到了证实:Dave Cheney:与Go 1.5交叉编译:
交叉编译时,应使用
go build,而不是go install。这是go build优于的少数情况之一go install。这样做的原因
go install总是将已编译的程序包,.a文件缓存到pkg/与源代码的根匹配的目录中。
| 归档时间: |
|
| 查看次数: |
8152 次 |
| 最近记录: |