LINUX.ORG.RU
ФорумTalks

[ненависть] Offtopic, Glib и статическая линковка

 


0

0

Рискуя навлечь на себя гнев местных красноглазых, всё же хочу поинтересоваться. Какого, извините, ляду при простом статическом подключении libglib-2.0 и использовании всего лишь одного g_printf() программа, собранная в офтопике в mingw, увеличивается как минимум на 50 кб? Казалось бы, задача - вычислить адрес, сформировать вызов, профит. Почему бинарник растёт и что в нём растёт?

★★★★★

а сделал ли ты strip

Казалось бы, задача - вычислить адрес, сформировать вызов, профит.

линковщик так не работает, он линкует всё библиотеку, ибо неизвестно какая часть кода библиотеки понадобится для организации данного системного вызова

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

Отлично, а зачем тогда библиотека нужна при запуске программы, если всё что из неё требовалось - засунуто в результирующий бинарник?

jcd ★★★★★
() автор топика

> всего лишь одного g_printf()

Всего-лишь один жалкий g_printf() может вызвать статическую функцию для проверки какой-то опции, а та в свою очередь проинициализировать внутренние статические переменные какой-то неизвестной логикой. И так далее. В итоге в программу тянутся все функции плюс статические данные, на которые хоть где-то в этом дереве есть ссылка. 50 кб - это ещё по-божески.

Dendy ★★★★★
()
Ответ на: комментарий от Dendy

Это всё я прекрасно понимаю, мне не понятно другое. Если происходит динамическая линковка - то почему увеличивается размер программы? Если статическая - зачем тогда доступ к библиотеке при запуске?

jcd ★★★★★
() автор топика
Ответ на: комментарий от anotheranonymous

Microsoft Windows XP [Версия 5.1.2600]
(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Администратор>strip
«strip» не является внутренней или внешней
командой, исполняемой программой или пакетным файлом.

Гугль - так вообще кидает на сайты голыми женщинами на шесте.

jcd ★★★★★
() автор топика
Ответ на: комментарий от jcd

Так как всё-таки либа прилинкована, статически или динамически? Или проблема в том, что оно сожрало 51k и ещё хочет DLL?

Dendy ★★★★★
()
Ответ на: комментарий от progman

> Или проблема в том, что оно сожрало 51k и ещё хочет DLL?

именно.

gcc -s


отлично, теперь бинарник 5 килобайт и я ничего не понимаю.

jcd ★★★★★
() автор топика
Ответ на: комментарий от jcd

Хотя нет, теперь всё понимаю. Спасибо!

jcd ★★★★★
() автор топика
Ответ на: комментарий от jcd

> Речь изначально была про оффтопик.

Даже в оффтопике не следует работать под администратором.

tailgunner ★★★★★
()

>mingw
там есть стрип добавь bin в PATH
бывают библиотеки собранные из множества *.o объектов, каждый объект может линковаться по отдельности

dimon555 ★★★★★
()

дурной вопрос - а нафига вообще тащить glib, если из нее используется только g_printf?

ananas ★★★★★
()

гугл, первая же строка
man+strip

axiz
()
Ответ на: комментарий от ananas

>дурной вопрос - а нафига вообще тащить glib, если из нее используется только g_printf?

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

там есть стрип добавь bin в PATH


видимо параметр -s для gcc запускает strip автоматом, это не требуется. Плюс эклипс с рабочей средой и mingw у меня на флэшке, а флэшка курсирует, поэтому изменять PATH на каждой машине, где я соберусь покодить - неудобный подход.

Даже в оффтопике не следует работать под администратором.


Начиная с момента её релиза и до нынешного дня если и сижу здесь - то только под админом, проблем не имею. Наверное, я что-то делаю не так.

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