3 回答
TA贡献1836条经验 获得超13个赞
这是一个即使使用 CGO 也可以使交叉编译变得超级简单的解决方案。
我最近在浪费大量时间获得一个新的 Windows 构建服务器来构建我的 Go 应用程序后偶然发现了它。现在我只是在我的 Mac 上编译它,并用它创建一个 Linux 构建服务器:
https://github.com/karalabe/xgo
非常感谢 Péter Szilágyi 别名 karalabe 为这个非常棒的包!
如何使用:
让 Docker 运行
去 github.com/karalabe/xgo
xgo --targets=windows/amd64 ./
还有很多选择!
- 编辑 -
差不多 3 年后,我不再使用它了,但是我的 docker 镜像在基于 linux 的 CD 管道中构建我的应用程序仍然基于xgo
.
TA贡献1851条经验 获得超3个赞
您可以从可执行文件所需的不同操作系统创建一个 Docker 容器,并将卷映射到您的 src 目录。运行容器并从容器内生成可执行文件。您最终会得到一个可以在不同操作系统上运行的二进制文件。
TA贡献1818条经验 获得超3个赞
我使用第一种方法。这是构建代码的吞咽任务。如果设置了生产标志,它将GOOS=linux CGO_ENABLED=0 go build改为 运行go build。所以二进制文件将在 docker 容器内工作
gulp.task('server:build', function () {
var build;
let options = {
env: {
'PATH': process.env.PATH,
'GOPATH': process.env.GOPATH
}
}
if (argv.prod) {
options.env['GOOS'] = 'linux'
options.env['CGO_ENABLED'] = '0'
console.log("Compiling go binarie to run inside Docker container")
}
var output = argv.prod ? conf.paths.build + '/prod/bin' : conf.paths.build + '/dev/bin';
build = child.spawnSync('go', ['build', '-o', output, "src/backend/main.go"], options);
if (build.stderr.length) {
var lines = build.stderr.toString()
.split('\n').filter(function(line) {
return line.length
});
for (var l in lines)
util.log(util.colors.red(
'Error (go install): ' + lines[l]
));
notifier.notify({
title: 'Error (go install)',
message: lines
});
}
return build;
});
- 3 回答
- 0 关注
- 247 浏览
添加回答
举报