最近需要在路由器上搞点事情,

开始我是直接编译openwrt,将go和gcc都打包.

结果固件103M,强制烧录到我路由器上,(超容量了)把系统挂了.自己稍微弄下路由器恢复了.

后面主要是交叉编译环境.在windows或者ubuntu上交叉编译项目,然后将可执行文件拷到路由器上用.

 

后面我分别打包了一个gcc固件,一个go语言固件.

发现编译太慢太慢.于是放弃路由器直接编译!

 

go语言支持

go语言本身自带交叉编译环境.不需要怎么设置.

 

关于go安装到windows不说明

 

 

 

在windows上交叉编译一个v2ray-core到路由器.

 

设置交叉编译环境变量

使用window自带的powershell,设置环境变量

$env:CGO_ENABLED=0
$env:GOOS="linux"
$env:GOARCH="mips"
$env:GOMIPS="softfloat"

 

我的路由器平台是mips

 

 

编译v2ray-core

 

首先下载各种源

go get -u -v v2ray.com/core/...

下载后

进入 v2ray代码目录(默认在个人文件夹下面有个go目录, )

C:\Users\USERNAME\go\pkg\mod\v2ray.com\core@v4.19.1+incompatible>

 

编译

 

go build -o v2ray -trimpath -ldflags "-s -w" ./main
go build -o v2ctl -trimpath -ldflags "-s -w" -tags confonly ./infra/control/main

 

编译后,在当前目录有生成"v2ray" 和 "v2ctl"两个文件.

拷贝到路由器上去,加X执行权限,就可以可以执行.

 

参考

https://www.v2fly.org/developer/intro/compile.html#windows

https://github.com/v2ray/discussion/issues/756

https://www.v2ex.com/t/684263

https://blog.csdn.net/qq531456898/article/details/80095707

 

gcc支持

gcc要在编译openwrt的时候选择编译.

 

先装openwrt编译环境,不不说明.

 

 

make menuconfig设置

 

编译导出交叉编译工具

 

勾选

Package the OpenWrt-based Toolchain

 

 

编译出来,在bin/targets/平台/

 

我的是

openwrt-toolchain-ath79-nand_gcc-8.4.0_musl.Linux-x86_64.tar.bz2

 

 

解压工具包到/opt目录

sudo tar jxvf  openwrt-toolchain-ath79-nand_gcc-8.4.0_musl.Linux-x86_64.tar.bz2  -C  /opt/

 

编辑并执行配置工具,进入解压后目录里面的bin目录

vi mipsel-openwrt-linux-musl-wrapper.sh

 

TOOLCHAIN_BIN_DIR="$REALNAME_DIR/"
##添加这下面一行
export STAGING_DIR="$REALNAME_DIR/../../"

 

 

设置环境变量,并生效

 

我的路径是这样,其他路径修改下即可.

export PATH=$PATH:/opt/openwrt-toolchain-ath79-nand_gcc-8.4.0_musl.Linux-x86_64/toolchain-mips_24kc_gcc-8.4.0_musl/bin

source /etc/profile

 

然后用

 

mips-openwrt-linux-musl-gcc

 

编译c项目即可生成可执行文件,复制到路由器并加执行权限,就可以执行.

 

 

参考

 

https://blog.csdn.net/lingyizhangfankai/article/details/47007811