Sloaix/Gofi

请提供交叉编译指南

Closed this issue · 8 comments

尊敬的开发者:

您好

我是开源项目SCRIPTS-BOOTLOADER-FOR-ASUS-ROUTER的开发者。当前,此项目软件库使用filebrowser作为网盘插件。不幸的是,项目filebrowser已于20200109宣告结束。我觉得您的项目很适合引入我的项目作为网盘插件,原因有三:

  1. GO语言编写,便于跨平台
  2. 单文件,无需外部依赖,部署简单
  3. 功能可以满足个人日常使用

但是,我在尝试引入您的项目时,遇到了几个困难,希望您可以提供帮助:

  1. 项目使用了CGO,导致无法单纯使用GO直接编译,需要搭建相应的C交叉编译环境。请您提供交叉编译指南
  2. 如方便,请提供linux-armv5, linux-mipsle-softfloat和linux-arm64的静态预编译版本

非常感谢

由于最近由于国内新冠肺炎病毒疫情问题,所以家里有一堆事情需要处理,所以Gofi一段时间没有更新了,最近才看到这个issue。

Gofi最近应该会继续更新,Gofi使用了xgo来交叉编译,你提到的交叉编译指南我最近会更新.

访问打不开

尊敬的开发者:

您好

我是开源项目SCRIPTS-BOOTLOADER-FOR-ASUS-ROUTER的开发者。当前,此项目软件库使用filebrowser作为网盘插件。不幸的是,项目filebrowser已于20200109宣告结束。我觉得您的项目很适合引入我的项目作为网盘插件,原因有三:

  1. GO语言编写,便于跨平台
  2. 单文件,无需外部依赖,部署简单
  3. 功能可以满足个人日常使用

但是,我在尝试引入您的项目时,遇到了几个困难,希望您可以提供帮助:

  1. 项目使用了CGO,导致无法单纯使用GO直接编译,需要搭建相应的C交叉编译环境。请您提供交叉编译指南
  2. 如方便,请提供linux-armv5, linux-mipsle-softfloat和linux-arm64的静态预编译版本

非常感谢
............
.
.
.
.

访问打不开

服务挂了,已经恢复。@guanzi008

会在1.0.0重构版本新增提及的静态预编译版本,重构后的gofi没有依赖外部的UI框架,重写了所有的组件.并且使用了golang官方提供的Embed能力,不再依赖第三方静态资源嵌入框架,后端部分会更干净.

Gofi使用了xgo(techknowlogick维护的版本)进行交叉编译,目前来看xgo支持的系统和CPU架构如下:

Limit build targets

By default xgo will try and build the specified package to all platforms and
architectures supported by the underlying Go runtime. If you wish to restrict
the build to only a few target systems, use the comma separated --targets CLI
argument:

  • --targets=linux/arm: builds only the ARMv5 Linux binaries (arm-6/arm-7 allowed)
  • --targets=windows/*,darwin/*: builds all Windows and OSX binaries
  • --targets=*/arm: builds ARM binaries for all platforms
  • --targets=*/*: builds all suppoted targets (default)

The supported targets are:

  • Platforms: darwin, linux, windows
  • Achitectures: 386, amd64, arm-5, arm-6, arm-7, arm64, mips, mipsle, mips64, mips64le

Gofi使用了gulp来处理构建流程(最开始是手写的shell,但是可维护性太差,后面换成了Gradle,但是灵活性又太差,现在被我切换成了gulp)。

根目录的gulpfile.js构建脚本中的这一行:

`${xgoPath} -out=gofi -tags=${currentMode} -ldflags='-w -s -X gofi/db.version=${version} -linkmode "external" -extldflags "-static"' -out=gofi --dest=./output --targets=windows/amd64,linux/amd64,linux/arm ./`

在最后指定了target参数,如果你想自行编译其他架构的版本,你可以把项目download下来,修改target参数,自行交叉编译。

然后确保你已经配置好以下编译环境:

  • node lts (version 14)
  • yarn
  • golang
  • docker
git clone https://github.com/Sloaix/Gofi.git
cd Gofi
yarn && yarn build
# 最后的构建产物在Gofi目录的outputs文件夹里面

ps.Gofi linux 版本我已经添加参数 -linkmode "external" -extldflags "-static"修改为静态链接了,之前是动态链接,但在docker alpine的发行版上无法运行。由于我没有上述架构的设备,所以我没有办法验证构建的包是否能够正常运行。所以需要你自行测试一下。如果你验证可运行,我在1.0.0正式发布的时候,可以将你验证通过的target参数合并进gulpfile.js中,当然你也可以提交一个pr到develop分支。