起因
自己用Go语言写了个TCP服务器应用,在阿里云和本地WSL2的 Debian
运行正常。
现打算在本地电脑的Windows环境下,把这个Go项目,跨平台编译成 OpenWrt
软路由操作系统的二进制可执行文件。
更改环境变量
网上百度说 OpenWrt 是 mipsle
架构,故设置环境变量 set GOARCH=mipsle
# 设置操作系统
set GOOS=linux
# 设置平台架构
set GOARCH=mipsle
# 不依赖现有的C库动态链接库,独立打包
# 使用ldd命令可查看可执行文件依赖的动态链接库
set CGO_ENABLED=0
跨平台交叉编译
go build -ldflags "-s -w" -o outfile .
结果运行编译后的文件时报错: syntax error: unexpected ")"
发现可能是把目标操作系统的架构搞错了。
在 OpenWrt
软路由操作系统,输入查看 Linux
系统信息的通用命令:
uname -a
输出:
Linux OpenWrt 6.1.22 #0 SMP PREEMPT_DYNAMIC Fri Mar 31 05:34:43 2023 x86_64 GNU/Linux
居然是 x86_64
,和工作时接触最多的Linux服务器系统常见架构一样。也就是 amd64
。
更改环境变量,重新编译后,便可在 OpenWrt
软路由系统上正常运行了:
set GOARCH=amd64
golang 交叉编译 https://yikakia.github.io/golang-交叉编译/
CGO_ENABLED、GOOS、GOARCH、CC相关参数详解 https://blog.csdn.net/qq_36657175/article/details/124024503
openwrt上部署go web项目 https://blog.csdn.net/weixin_45254641/article/details/114460997
Go 静态编译机制 https://blog.csdn.net/qq_43580193/article/details/120305231
Golang交叉编译之跨平台编译使用详解 https://www.jb51.net/article/264383.htm