как собрать плагины с помощью gcc из mingw?

Место, где разработчики плагинов могут поделиться своим опытом.
2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Собрать Far самому

Post by 2useven10 » Wed 10 Apr, 2013 15:17

Latest post of the previous page:

добавить флаги линкера: -static-libgcc -static

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 14:41

А куда это можно добавить, чтобы не приходилось дублировать в каждом Makefile?

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Собрать Far самому

Post by 2useven10 » Fri 12 Apr, 2013 15:03

Боюсь это зависит от системы сборки каждого бинарника...
Универсального ответа не знаю.

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 15:27

Если взять gcc не с mingwbuilds, а из других источников (например), то libgcc линкуется статически и без дополнительных флагов, вот я и подумал что может быть они указываются где-то глобально.
Но это не особо важно.

А другой вопрос: как минимизировать размер получившегося dll/exe?
Например lua.exe, собранный с немодифицированным makefile, занимает 40 Кб
Тот же lua.exec farmanager.svn - 13 Кб.
Это не случайность, такая же картина с прочими "собственноручно" собранными dll/exe

Я понимаю что это вопрос чайника, и простого ответа скорее всего нет, но вдруг есть общие рекомендации

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Собрать Far самому

Post by 2useven10 » Fri 12 Apr, 2013 15:39

для начала можно поставить оптимизацию кода по размеру (-Os) и линкеру опцию strip (-s).

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 15:53

Попробовал собрать что-то простое
lcl.o - 3645
cl.dll - 37888, т.е. в 10 раз больше.


2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Собрать Far самому

Post by 2useven10 » Fri 12 Apr, 2013 16:52

вполне приемлемо. у меня с -Os (и возможно другой версией компилятора) - 35к.
сравнимо с luamacro.dll, собственного кода и там и там немного, используемая библиотека одна.

User avatar
DrKnS
Posts: 4563
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 2 times
Been thanked: 113 times
Contact:

Re: Собрать Far самому

Post by DrKnS » Fri 12 Apr, 2013 16:53

John Doe wrote:как минимизировать размер получившегося dll/exe?
...
Я понимаю что это вопрос чайника, и простого ответа скорее всего нет, но вдруг есть общие рекомендации
Общая рекомендация — не заниматься подобными глупостями.

2useven10
Posts: 2978
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 2 times
Been thanked: 80 times

Re: Собрать Far самому

Post by 2useven10 » Fri 12 Apr, 2013 16:58

Общая рекомендация — не заниматься подобными глупостями.
Каждый выбирает себе глупости сам. :popcorn:

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

Re: Собрать Far самому

Post by Shmuel » Fri 12 Apr, 2013 17:08

GCC-7.1
cl.dll - 11264
luamacro.dll - 11776

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 17:37

А LuaMacro.dll в дистрибутиве 38912.
Лишние 30 Кб это конечно ерунда, но спортивный интерес присутствует.

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

Re: Собрать Far самому

Post by Shmuel » Fri 12 Apr, 2013 17:42

luamacro.dll и luafar3.dll в дистрибутиве собираются Visual Studio, статически, чтобы избежать зависимости от редистрибутивов Майкрософта. А цифры, приведенные мной, это "динамическая" сборка (то-есть присутствует зависимость от msvcrt.dll).

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 17:51

Понятно.
Но cl.dll и lua.exe, собранные gcc 4.8, всё равно на 25 Кб больше чем ваши, хотя тоже зависят от msvcrt.dll

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

Re: Собрать Far самому

Post by Shmuel » Fri 12 Apr, 2013 17:54

John Doe wrote:Но cl.dll и lua.exe, собранные gcc 4.8, всё равно на 25 Кб больше чем ваши, хотя тоже зависят от msvcrt.dll
Это зависит от опций компиляции и линковки. Может зависеть также от опций сборки самой GCC.

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 18:14

Если использовать один makefile, то и опции должны совпадать.
Так что скорее дело в опциях сборки GCC.

Shmuel
Posts: 5100
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 140 times

Re: Собрать Far самому

Post by Shmuel » Fri 12 Apr, 2013 18:19

Вот как примерно выглядят мои мейкфайлы для сборки Lua-библиотек:

Code: Select all

PROJECT = cl
OBJ = lcl.o

include $(PATH_SYSTEM)/_mingw.mak
Сейчас из спортивного интереса скачал gcc 4.8 c http://nuwen.net/
cl.dll - 12800 байт.

User avatar
John Doe
Бюрократ
Posts: 11097
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 12 times
Been thanked: 67 times

Re: Собрать Far самому

Post by John Doe » Fri 12 Apr, 2013 20:56

Да, действительно, получается что в данном случае размер больше зависит от дистрибутива mingw, чем от опций.

Собрал luajit с помощью этого "nuwen", lua5.1.dll получилась больше, чем у собранного "mingw-builds" (425472 против ~390000)

А при тех же опциях tdm-gcc-4.7.1-2 собрал dll 367104

Post Reply

Return to “Разработка плагинов”