V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sadfQED2
V2EX  ›  问与答

golang 在 mipsle 平台的问题

  •  
  •   sadfQED2 · 2020-06-23 21:13:24 +08:00 · 2112 次点击
    这是一个创建于 1603 天前的主题,其中的信息可能已经有所发展或是发生改变。

    本猿互联网后端仔一只,想写点程序放路由器上面运行。经过查询,golang 支持 mipsle,我手持 newifi3 一台,但是我用 win10 go1.14 无论怎么编译,放到路由器上面运行,始终输出 bus error 。 这玩意究竟啥意思,好像根本搜不到这方面的资料,各位老哥谁懂行的?给指点一下?

    golang 代码只有一行,如下

    package main
    
    import (
    	"fmt"
    )
    
    func main() {
    	fmt.Println("hello world!")
    }
    
    
    

    编译命令:

    set GOOS=linux
    
    set GOARCH=mipsle
    
    go build main.go
    
    

    路由器 uname

    Linux OpenWrt 4.14.172 #0 SMP Mon Apr 6 15:29:11 2020 mips GNU/Linux
    
    第 1 条附言  ·  2020-06-24 15:25:05 +08:00
    我自己找到原因了,是因为路由器的 cpu 不支持浮点运算,编译需要加个参数:


    GOMIPS=softfloat GOOS=linux GOARCH='mipsle' go build main.go


    另外:

    GOMIPS=softfloat GOOS=linux GOARCH='mipsle' go build -ldflags "-s -w" main.go

    加上这个参数可以让编译出来的文件小大约 0.5M,路由器上面还是挺宝贵的
    11 条回复    2023-06-13 16:26:58 +08:00
    polaa
        1
    polaa  
       2020-06-23 23:44:59 +08:00
    因为路由器上的系统是阉割版 linux 大概的可能的不满足依赖? 不是很确定

    一般编译嵌入式设备是是使用 buildroot 或者 crosstool-ng 等嵌入式平台的交叉编译工具链
    ysc3839
        2
    ysc3839  
       2020-06-24 00:07:33 +08:00 via Android
    尝试用 OpenWrt 的 SDK 编译?
    Reficul
        3
    Reficul  
       2020-06-24 00:15:15 +08:00
    mipsle 有好几个细分的 Target , 比如 mips mips64 mips64le mipsle
    sadfQED2
        4
    sadfQED2  
    OP
       2020-06-24 07:58:12 +08:00 via Android
    @Reficul 我每个都尝试了,都不管用
    sadfQED2
        5
    sadfQED2  
    OP
       2020-06-24 07:59:03 +08:00 via Android
    @polaa 好的,我去查查,多谢
    sadfQED2
        6
    sadfQED2  
    OP
       2020-06-24 07:59:29 +08:00 via Android
    @ysc3839 多谢, 我去查查咋用
    goofool
        7
    goofool  
       2020-06-24 09:49:32 +08:00
    1 、路由器空间够么
    2 、ldd main 看看
    sadfQED2
        8
    sadfQED2  
    OP
       2020-06-24 14:15:40 +08:00
    @goofool ldd: main: Not a valid dynamic program
    sadfQED2
        9
    sadfQED2  
    OP
       2020-06-24 14:46:27 +08:00
    @polaa
    @ysc3839

    https://github.com/kuoruan/openwrt-frp/blob/master/Makefile

    https://github.com/kuoruan/openwrt-v2ray/blob/master/Makefile

    请问老哥说的是这种吗,我看了别人项目的编译,为啥是一个 Makefile 呀,我理解的 go 语言编译不应该是 go build 一下就行了么,Makefile 不应该是 c 语言里面的么,这样的话我那个 hello word 要咋写 Makefile 呢,能给个关键词么,搜了半天都没搜到相关资料
    ysc3839
        10
    ysc3839  
       2020-06-24 16:20:42 +08:00
    @sadfQED2 因为这是配合 OpenWrt 的 build system 用的,而这套 build system 是基于 make 的,所以要求写 Makefile 。
    cosmain
        11
    cosmain  
       2023-06-13 16:26:58 +08:00
    这个 CPU 没有 FPU ,要软浮点。
    GOMIPS=softfloat
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5811 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 02:46 · PVG 10:46 · LAX 18:46 · JFK 21:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.