Программа Golang аварийно завершает работу (ошибка сегментации) при работе на маршрутизаторе OpenWRT ARMv7 rev 5 (v7l)

Я пытаюсь скомпилировать кросс-платформу в Golang для работы на маршрутизаторе OpenWRT (GDock). Целевая система:

Linux OpenWrt 5.15.118 #0 SMP Ср, 5 июля 20:20:32 2023 Armv7l GNU/Linux

Название модели: Процессор ARMv7, версия 5 (v7l) БогоМИПС: 26,81 Особенности: половина большого пальца fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm Разработчик ЦП: 0x41 Архитектура процессора: 7 Вариант процессора: 0x0 Часть процессора: 0xc07 Версия процессора: 5 Я написал небольшую программу, которая печатает «Hello world», используя только модуль импорта «fmt». Программа ниже:

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 version go1.22.2 linux/amd64

Программа работает на Ubuntu:

./main 
Hello world!

Однако когда я скопировал программу на роутер, я получил Segmentation Fault. Я попытался скопировать занятое поле маршрутизатора и проверить его с помощью команды 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. Но это не моя проблема!

Почему у меня возникла ошибка сегментации? Не могу отладить из-за ресурса приборки на роутере. Как я могу это исправить?

Странно, что программа компилируется для ARM и работает на вашей машине с Linux AMD64. Также странно, что он отображается как статически связанный в Ubuntu, но динамически связанный на маршрутизаторе. Что именно вы делаете, каковы хэши sha256 различных двоичных файлов?

eik 30.05.2024 19:55

Используете ли вы FTP для загрузки скомпилированного двоичного файла на маршрутизатор? Если да, обязательно сначала переключите режим передачи на двоичный и повторите попытку.

kostix 30.05.2024 20:29

Видимо похожий вопрос.

kostix 30.05.2024 20:34

@eik есть 2 файла: busybox — это динамически связанный двоичный файл, а мой файл — статически связанный двоичный файл.

Cons 31.05.2024 19:34

Кстати, GO=linux, вероятно, это не то, что вы думаете, поскольку инструментальная цепочка Go распознает GOOS, а не только GO.

kostix 31.05.2024 19:41

@kostix Я использовал программу openwrt для загрузки файла

Cons 31.05.2024 20:01

Если у вас есть решение вашей проблемы, опубликуйте его в качестве ответа! Вы можете принять его, чтобы пометить вопрос как решенный.

mkrieger1 31.05.2024 20:09
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
1
7
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема связана с моим ftp, я проверил sha2sum и понял, что мой файл поврежден при загрузке на сервер. Итак, я использую разницу sftp-сервера и контрольной суммы, чтобы убедиться, что файл не поврежден, и тогда все сработало!

Другие вопросы по теме