openwrt 查看运行程序_Go 语言交叉编译在 openwrt 上运行的程序

2023-11-05

go 语言一个很好的地方是可以方便的进行交叉编译,也就是编译出在不同于当前硬件平台 + 操作系统 上运行的程序。

今天尝试编译一段代码到小米路由器 3G 上运行,具体过程记录在下面,供大家参考。

环境:

编译环境:mac + go 1.11

运行环境:路由器操作系统是 openwrt,cpu 为 mips 架构的 32 位处理器 MT7621,双核四线程 (居然一个路由器 cpu 也带超线程技术 ),无 fpu。

代码:

hello.go

package main

import "fmt"

func main() {
    fmt.Printf("hello, worldn")
}

编译:

交叉编译的命令和平时一样,也是 go build,只需要通过 GOOS 和 GOARCH 指定目标平台的操作系统和 cpu 架构,编译出来的就是其他平台上的可执行文件了

这里因为 MT7621 没有 fpu 也就是浮点处理器,所以指定使用软浮点,这样 go 会通过其他指令来模拟浮点运算,编译出来的程序里面不会包含浮点计算指令,否则调用不存在的 fpu 会出现 Illegal instruction

 GOOS=linux GOARCH=mipsle GOMIPS=softfloat CGO_ENABLED=0 go build
早期版本的 go 需要借助第三方库才可以实现 mips 平台的交叉编译,但 1.11 版本的 go 已经内置了 mips 平台的支持,所以不需要第三方库
对 MT7621 无 FPU 的另外一个处理办法是在编译 openwrt 时打开内核的浮点模拟器,这样不需要指定 GOMIPS=softfloat 编译出来的程序也可以运行。不过我觉得既然都是模拟,在内核模拟跟在这里模拟也差不多,所以对无 FPU 的处理器,直接指定 GOMIPS=softfloat 即可

编译得到 hello , scp 至目标平台运行

root@OpenWrt:/tmp# ./hello 
hello, world
root@OpenWrt:/tmp#

一切正常,我们已经成功编译出在路由器上执行的可执行文件了

过程中的坑:

1,go 1.11 版本编译缓存处理有问题,切换 GOMIPS=softfloat/hardfloat 时,生成的产物不会变化,需要手动清理缓存,才能得到正确的结果。经过搜索在 github 上找到了对应的 issue,并且是已修复状态。于是升级到最新的 go 1.11.5,问题解决。

2,一开始 GOARCH 指定成了 mips,即 mips 处理器的大端架构,编译出来的产物,执行时出现

./hello: line 1: syntax error: unexpected "("

经查发现 GOARCH 可以为 mips/mipsle 分别对应大小端,这里 MT7621 为小端架构,于是将 GOARCH 换成 mipsle 后解决

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

openwrt 查看运行程序_Go 语言交叉编译在 openwrt 上运行的程序 的相关文章

  • fatal: unable to access =‘https://github.com/‘: OpenSSL SSL_read: Connection was reset, errno 10054

    命令 git clone https github com binary husky chatgpt academic git 出现问题 采用了 git config global unset http proxy 命令还是不行 把 htt
  • Android自动化测试工具——Monkey

    前言 最近开始研究Android自动化测试方法 整理了一些工具 方法和框架 其中包括android测试框架 CTS Monkey Monkeyrunner benchmark 以及其它test tool等等 一 什么是Monkey Monk
  • python range和xrange

    python range和xrange 如果需要迭代一个数字序列的话 可以使用range 函数 range 函数可以生成等差级数 如例 for i in range 5 print i 这段代码将输出0 1 2 3 4五个数字 range
  • Python中对负数的整除和取余及特值情况

    整数取余负数 技巧 先忽略负号 之后取余 和正常取余不同的是 被取余的数x一个数 不能比取余的数小 可以相等 这意味着任何一个整数取余 1结果都为0 之后用这个数减去取余的数 最后在得到的结果上加上负号 当被取余的负数取正后大于取余的数时
  • lettuce jedis 比较

    Lettuce 和 Jedis 的定位都是Redis的client 所以他们当然可以直接连接redis server Jedis在实现上是直接连接的redis server 如果在多线程环境下是非线程安全的 这个时候只有使用连接池 为每个J
  • PostgreSQL IoT,车联网 - 实时轨迹、行程实践 1

    背景 车联网 IoT场景中 终端为传感器 采集各个指标的数据 同时包括时间 GIS位置信息 速度 油耗 温度 EDU采集指标 在运动过程中 通过GPS准实时上报到服务端 服务端则通常根据设备 比如车辆 时间范围 查询指定设备在某个时间区间的
  • redis 由浅入深 之 进阶(服务器)

    Redis 服务器 Redis 服务器命令主要是用于管理 redis 服务 bgrewriteaof 命令用于异步执行一个 AOF AppendOnly File 文件重写操作 重写会创建一个当前 AOF 文件的体积优化版本 即使 Bgre
  • linux服务器上僵尸进程查看并杀死方法

    今天在熟悉Linux命令的时候 使用top查看服务器负载的时候 发现了zombie 简单理解成僵尸吧 这个参数 这个参数就代表僵尸进程的含义 什么是僵尸进程呢 这里盗用一下官方的解释 一个进程在调用exit命令结束自己的生命的时候 其实它并
  • c语言程序设计彩色输出,C语言编程之《输出带有颜色》

    在前一篇文章我们学习了让计算机开口说话是使用printf 但是我们发现 计算机 说 出的话都是 黑底白字 的 其实计算机可以输出彩色的 我们一起来看看吧 注意此处代码只能在Windows操作系统下编译运行 下面 我们来看看 如何让颜色出现吧
  • Webpack5 的一些知识总结

    大厂技术 高级前端 Node进阶 点击上方 程序员成长指北 关注公众号 回复1 加入高级Node交流群 前言 webpack 5是2020年发布的 webpack 4是2018年发布的 在webpack 4之上也做出了挺多的改变 比如 添加
  • MySQL JDBC URL参数

    参数清单 属性名 定义 要求 默认值 版本 Connection Authentication 连接 鉴定 user 连接的用户 No 全部 password 连接时使用的密码 No 全部 socketFactory 驱动程序用于创建与服务
  • 基于Python 课程设计-学生管理系统(附源码+可执行程序)

    前言 基于Python 课程设计 学生管理系统 附源码 可执行程序 非常完整的一个项目 可以作为课程设计去学习 本系统的完整源码在文章结尾处 大家自行获取即可 开发环境要求 本系统的软件开发及运行环境具体如下 操作系统 Windows 7
  • VSCode配置

    VSCode配置 1 SSH远程连接到ubuntu系统 VSCode下载扩展 Config文件编写 接入SFTP 免密登陆 2 Debug模式下进入标准库文件 第三方包源码 3 VSCode大纲只显示类和函数 不显示变量 1 SSH远程连接
  • leetcode:165. 比较版本号

    题目来源 leetcode 题目描述 题目分析 比较两个版本号大小 版本号由修订号组成 中间使用 分隔 越靠近字符串前边 修订号的优先级越大 当v1 gt v2时返回 1 当v1 lt v2时返回 1 相等时返回 0 双指针 如样例所示 v
  • 微服务中使用Sentinel实现服务容错

    在微服务架构中 我们将业务拆分成一个个的服务 服务与服务之间可以相互调用 但是由于网络原因或者自身的原因 服务并不能保证服务的100 可用 如果单个服务出现问题 调用这个服务就会出现网络延迟 此时若有大量的网络涌入 会形成任务堆积 最终导致
  • 快速入门(完整):Python练手经典实例100个 (让你的Python技能点全亮)

    Python练手经典实例100个 一 Python 基础 62 例 1 十转二 2 十转八 3 十转十六 4 字符串转字节 5 转为字符串 6 十转ASCII 7 ASCII转十 8 转为字典 9 转为浮点类型 10 转为整型 11 转为集
  • [转]修改python默认的编码方式

    今天碰到了 python 编码问题 报错信息如下Traceback most recent call last File ntpath pyc line 108 in joinUnicodeDecodeError ascii codec c
  • L6200E: Symbol **** multiply defined

    这个错误是链接器 Linker 报告的错误 指示在链接过程中出现了符号 SystemInit 的多重定义 具体来说 符号 SystemInit 被两个目标文件 system stm32f0xx 1 o和system stm32f0xx o
  • 图解RAM结构与原理,系统内存的Channel、Chip与Bank

    文章目录 转载正文 标题挥发性内存分2种 SRAM和DRAM 主内存子系统 channel 和 DIMM rank 和 chip bank row column 内存的读写方式 越多越好 加速读写能力 本文转载来自 图解RAM结构与原理 系

随机推荐

  • 利用mybatis框架的解析器实现文本动态参数

    问题 脚本模板完成后 有些不同的主机执行同一个脚本模板时需要的参数不一样 那么在不同的主机上执行同个脚本时怎么动态将参数赋值给待执行的脚本 而不用直接修改脚本内容 解决方案 Mybatis框架本身的解析器GenericTokenParser
  • Springboot整合Zipkin+kafka+ELK,实现链路追踪和日志收集

    背景 随着项目的深入 久不久可能出现些问题 但是查询起来又极其麻烦 线上有三台服务器 不知道报错日志在那台上 很麻烦 所以领导要求把项目的链路追踪和日志给统一输出到elk中 可以实现在elk查询 Zipkin Sleuth链路追踪 先来实现
  • 宠物行业如何进行软文营销

    如今 宠物已经成为了人们生活中不可或缺的一部分 大众对于萌宠的喜爱与日俱增 随着 萌宠经济 升温 越来越多的商机开始出现 伴随着宠物市场竞争的日益激烈 宠物行业的营销光靠硬广告很难吸引受众 现在的大趋势应该是软文营销为主 那么宠物行业应该如
  • Neural Network Intelligence (NNI)

    环境 conda install pytorch 1 7 0 torchvision 0 8 0 torchaudio 0 7 0 cudatoolkit 10 1 c pytorch 每次看起来都很简单 自己写起来才知道哪里不会 impo
  • 【整合】【故障排查】LINUX系统资源使用情况排查(top、htop、ps、pstree)

    LINUX系统资源使用情况排查 工作中我们常见的资源使用情况的排查包括 CPU使用情况 内存使用情况 网络带宽使用情况等等 而我们常用的工具有top htop ps pstree等等 htop top加强版 pstree ps加强版 ps与
  • spark sql 创建rdd以及DataFrame和DataSet互转

    spark sql 创建rdd以及DataFrame和DataSet互转 使用SparkSession读取本地文件创建rdd DateSet的介绍 DataFrame的介绍 Rdd转DateFrame 读取本地文件得到DataFrame D
  • 剑指offer面试题62(java版):圆圈中最后剩下的数字

    welcome to my blog 剑指offer面试题62 java版 圆圈中最后剩下的数字 题目描述 每年六一儿童节 牛客都会准备一些小礼物去看望孤儿院的小朋友 今年亦是如此 HF作为牛客的资深元老 自然也准备了一些小游戏 其中 有个
  • latex加空行,加分割线,注释,设置表格字体大小等操作

    1 在文字末尾加空行可以用 2 直接加空行可以用 3 分割线 hrule 4 Latex编辑器Texstudio的注释快捷键 注释 Ctrl T 取消注释 Ctrl U 5 设置表格字体大小 Latex字体大小设置代码 begin tabl
  • MobaXterm连接服务器(虚拟机)

    下载链接 MobaXterm 终端工具 下载 安装 使用教程 蜗牛也不慢 的博客 CSDN博客 这个讲的很详细了 注意虚拟机的IP获取
  • 关于UNITY中System.Drawing引用失败的处理方法

    关于UNITY中System Drawing引用失败的处理方法 今天在使用EPPlus中 遇到一个处于This type has been forwarded to assembly System Drawing Version 4 0 0
  • 解决pip下载pytorch因网速慢而失败的问题

    一 一般下载pytorch方法 1 首先打开浏览器 输入 pytorch 然后进行搜索 点击pytorch的官网就进入了 2 进入到pytorch的官网后 划叶到下面 找到下面的选择框 根据自己的配置 选择正确的版本号 选择完后 把红色框内
  • 完美立方(C语言)

    题目 形如 a 3 b 3 c 3 d 3a 3 b 3 c 3 d 3 的等式被称为完美立方等式 例如 12 3 6 3 8 3 10 312 3 6 3 8 3 10 3 编写一个程序 对任给的正整数 N N le 100 N N 10
  • C# AES加密算法

    using System using System Collections Generic using System IO using System Linq using System Security Cryptography using
  • Gradle 团队发布了Gradle 7.2

    Gradle 团队近日发布 Gradle 7 2 Gradle 是一个类似于 Maven 项目的自动化构建工具 支持依赖管理和多项目 Gradle 抛弃了 Maven 基于 XML 的繁琐配置 取而代之的是Gradle 采用了特定语言 Gr
  • python实现堆栈和队列

    1 python实现堆栈 可先将Stack类写入文件stack py 在其它程序文件中使用from stack import Stack 然后就可以使用堆栈了 stack py的程序如下 class Stack def init self
  • linux下通过mount挂载iscsi、ntfs、nfs详解

    通常服务器本机自带磁盘空间有限 都需要额外加载磁盘 可以采用mount方式把远程的共享存储磁盘加载进来 目前用过的有iscsi ntfs nfs三种类型 一 mount挂载iscsi类型1 查找下准备挂载的磁盘或者存储器 root loca
  • SSL P2415 连通块

    2008 南海初中竞赛 连通块 Time Limit 10000MS Memory Limit 65536K Total Submit 41 Accepted 19 Case Time Limit 1000MS
  • Ubuntu使用vim报错 “/user/lib/python3.10/site.py“ E212: Can‘t open file for writing

    这个错误是由于没有足够的权限导致的 尝试使用sudo命令来重启编辑器或者直接打开终端并使用sudo命令编辑文件 需要重新打开命令行 但是现在是ssh 可能是用root权限进入vim后权限过期 折磨我十分钟 在网上搜了很多方法也没有解决 最后
  • 第13节-PhotoShop基础课程-裁剪工具

    文章目录 前言 1 裁剪工具 1 基本操作 Alt Shift 2 拉直 3 内容识别 自动填充 2 透视裁剪工具 3 切片工具 长图分成多个 4 切片选择工具 5 存储为一张一张 前言 1 裁剪工具 1 基本操作 Alt Shift 2
  • openwrt 查看运行程序_Go 语言交叉编译在 openwrt 上运行的程序

    go 语言一个很好的地方是可以方便的进行交叉编译 也就是编译出在不同于当前硬件平台 操作系统 上运行的程序 今天尝试编译一段代码到小米路由器 3G 上运行 具体过程记录在下面 供大家参考 环境 编译环境 mac go 1 11 运行环境 路