LINUX.ORG.RU

strip: Формат файла не распознан

 


0

1

У меня 32-битная система, хочу уменьшить размер исполняемого файла, который написан на Golang и скомпилирован для amd64.

strip -h пишет что

strip: поддерживаемые цели: elf32-i386 elf32-iamcu a.out-i386-linux pei-i386 elf32-little elf32-big plugin srec symbolsrec verilog tekhex binary ihex trad-core

Есть ли способы уменьшить размер?

★★★★

У меня на 64-битном все есть, поставьте 64-битный strip.

p.s.

Да, я теоретик

RiseOfDeath ★★★★
()

Btw, strip может сломать бинарник, скомпиленный go.

anonymous
()

По идее с задачей справиится cross-toolchain c архитектуры системы (i386) на x86-64.

Но какие секции для Go нужны, а какие нет - не знаю.

GPFault ★★
()

Скачай сырцы binutils с ftp://ftp.gnu.org и собери для нужной цели (x86_64). В интернете про это полно документации.

Кстати, ты уверен, что хочешь сделать именно это? Может, тебе нужна опция -dynlink?

Deleted
()

который написан на Golang и скомпилирован для amd64.

Да, но strip - не от Golang. Если слинковано не binutils, то почему strip должен помочь?

А вот возможное решение (даже стрипать ничего не надо):

test.go

package main

import "fmt"

func main() {
        fmt.Printf("main\n")
}

$ go build test.go
$ ls -l test
2362456 test
$ gccgo -o test test.go
$ ls -l test
22624 test
$ gccgo -g -o test test.go
22624 test
gag ★★★★★
()
Ответ на: комментарий от dnb

А gccgo может компилировать под другую архитектуру

Конечно, multilib называется (amd64/i386/x32). Например, (из-под amd64) для i386 и x32:

$ gccgo -m32 -o test test.go
$ ls -l test.go
19580 test
$ gccgo -mx32 -o test test.go
$ ls -l test.go
19672 test

и операционную систему?

gcc - это не golang с его замечательным подходом к кросскомпиляции. gcc в принципе так не может (надо радоваться, что хотя бы multilib есть). Если очень-очень надо, придётся повозиться вот так.

gag ★★★★★
()

не помню насчет strip, а вот upx у go точно свой.

t184256 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.