Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Другие языки > golang мусор в exe


Автор: YahоО 9.9.2023, 20:26
Написал код в файле go, например Hello1.go, работает, далее в LiteIDE создал из него файл  Hello1.exe, работает, потом посмотрел что же написано в Hello1.exe внутри, а там масса текста на мой взгляд совершенно необязательного для функционирования данного исполняемого файла. 

Например там текстом записаны пути:
C:/Program Files/Go/src/internal/cpu/cpu.go 
C:/Program Files/Go/src/runtime/internal/sys/intrinsics_common.go 
C:/Program Files/Go/src/internal/bytealg/bytealg.go 
C:/Program Files/Go/src/internal/bytealg/count_native.go 
C:/Program Files/Go/src/runtime/iface.go 
...
C:/Program Files/Go/src/runtime/lfstack.go 
C:/Program Files/Go/src/runtime/alg.go
C:/Program Files/Go/src/runtime/stubs.go 
C:/Program Files/Go/src/runtime/typekind.go 
C:/Program Files/Go/src/runtime/type.go 
C:/Program Files/Go/src/runtime/mwbbuf.go 
C:/Program Files/Go/src/runtime/atomic_pointer.go 
C:/Program Files/Go/src/runtime/cgocall.go 
D:/Hello1.go

килобайт 10 подобного перечисления, и в том числе путь к оригинальному файлу Hello1.go, и если файл Hello1.go удалить то Hello1.exe все равно может работать, т.е. данный путь совершенно не нужен исполняемому файлу.
А если Hello1.exe записать на другой компьютер где нет go? Тогда зачем мне иметь ненужные текстовые строки в конечном файле? Как компилировать без мусора?
Может надо как то по другому настроить имеющийся LiteIDE ?




 

Автор: Oldshelf 10.9.2023, 06:35
Не нашёл по LiteIDE, но есть информация, как отменить включение отладочных данных в Go: https://stackoverflow.com/questions/30005878/avoid-debugging-information-on-golang

Автор: YahоО 10.9.2023, 13:36
Вполне вероятно рецепт по ссылке

https://stackoverflow.com/questions/30005878/avoid-debugging-information-on-golang  "рекомендую использовать его -ldflags="-s -w", который удаляет таблицу символов и отладочную информацию."

помог бы решить проблему, если бы я знал куда врисовать  -ldflags="-s -w", пытаюсь так:
go build hello.go -ldflags="-s -w"
и эдак:
go build hello.go -ldflags=-s -w
и:
go build hello.go -ldflags=-s

на все это пишет мне в ответ:
named files must be .go files: -ldflags=-s -w
Команда завершилась с кодом 1.
или
named files must be .go files: -ldflags=-s
Команда завершилась с кодом 1.

По поводу мусора от такой брендовой конторы как то никто и не озаботился до сих пор, все учатся языку и ооп и никто не заглядывает что же там в результате имеет, и множится и носится мусор по миру, удивительно как минимум.
По крайней мере мне так и не удается за два дня нагуглить хоть какое то практическое упоминание о попытках что то изменить.

Если просто вытереть хоть один символ в исполняемом файле в мусорной области, то файл уже не работает, т.е. даже не пользуясь хранимыми ссылками тем не менее проверяет свою целостность вероятно по хеш-сумме имеющейся в файле.

Рассматривая файл можно еще увидеть:
"...unicode.Cyrillic unicode.Deseret unicode.Devanagari unicode.Dives_Akuru unicode.Dogra unicode.Duployan unicode.Egyptian_Hieroglyphs unicode.Elbasan unicode.Elymaic unicode.Ethiopic unicode.Georgian unicode.Glagolitic unicode.Gothic unicode.Grantha unicode.Greek unicode.Gujarati unicode.Gunjala_Gondi..."
Спрашивается а вот это длинный перечень для чего присутствует в файле в котором управляющие символы вовсе не эти? 
Можно предположить что реально используемых и минимально необходимых символов в исполняемом файле всего 3-5% от общего их числа, остальное это вредный неиспользуемый в БЫТУ мусор! 

Автор: YahоО 10.9.2023, 15:11
"Чтобы уменьшить размер полученного двоичного файла" - почти в два раза.
"удалить информацию, ненужную во время выполнения" - все таки это мусор!
пишем так:

go build -ldflags="-s -w" hello.go

В итоге мусора конечно меньше, но файл все равно очищен не полностью.

Oldshelf спасибо за помощь!


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)