Golang 程序在 ARMv7 rev 5 (v7l) OpenWRT 路由器上运行时崩溃(分段错误)

问题描述 投票:0回答:1

我正在尝试在 Golang 中编译一个跨平台以在 OpenWRT Router (GDock) 上运行。目标系统是:

Linux OpenWrt 5.15.118 #0 SMP 2023年7月5日星期三20:20:32 armv7l GNU/Linux

型号名称:ARMv7 处理器版本 5 (v7l) 博戈MIPS:26.81 特点:半拇指fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm CPU实现者:0x41 CPU架构:7 CPU 版本:0x0 CPU部分:0xc07 CPU版本:5 我编写了一个小程序,仅导入“fmt”模块即可打印“Hello world”。程序如下:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello world!")
}

我通过以下方式编译它:

GO=linux GOARM=7,softfloat GOARCH=arm /usr/local/go/bin/go build .

我使用

file
命令检查了文件:
main: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, Go BuildID=z6RADCEu-jOWczIr0anP/cqhqMt2UfXF1iAnzuTKC/uwGWq8e4UU7E-hUo7T7S/eNInvO8n3j0q7bTGVsJ7, with debug_info, not stripped

我用来编译的当前系统:

Linux ubuntu 5.15.0-107-generic #117~20.04.1-Ubuntu SMP Tue Apr 30 10:35:57 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
Go 语言版本:
go version go1.22.2 linux/amd64

该程序适用于 Ubuntu:

./main 
Hello world!

但是,当我将程序复制到路由器时,我得到了

Segmentation Fault
。我尝试复制一个路由器 busybox 并使用
file
命令检查,得到的结果是:
busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-armhf.so.1, no section header

我在网上到处搜索都找不到答案,有些结果是CGO解决的。但这不是我的问题!

为什么出现分段错误?由于路由器上的资源整洁,我无法调试。 我该如何修复它?

go cross-compiling router openwrt armv7
1个回答
0
投票

问题出在我的 ftp 上,我检查了 sha2sum 并发现我的文件在上传到服务器时已损坏。因此,我使用差异 sftp 服务器和校验和来确保文件没有损坏然后它就可以工作了!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.