LINUX.ORG.RU

QT: статически линкованный бинарник огромный


0

0

Разрабатываю софт под ARM9, загрузка идет из NOR флеш, поэтому не особо быстро.

Собрал Qt 4.5.1 со статической линковкой и с динамической, чтобы сравнить эффективность.

Собрал приложение с обоими типами линковки и стрипанул.

В результате:
1) Статический бинарь: 10М
2) Динамический бинарь: 100к + 10М .so-файлов

Т.е. выигрышь просто нулевой! Почему вообще статический бинарь получился размером как у динамических библиотек?? У меня есть большие сомнения, что в моей аппликухе использованы все функции библиотеки. Я предполагал, что обычно статически линкуются только те функции, что использованы в программе. К Qt это не относится?

Собирая qt, убирай лишнее ключами:

./configure -release -opensource -static -no-sql-sqlite -no-qt3support -no-opengl -no-libtiff -no-dbus -no-phonon -no-phonon-backend -no-webkit

или

./configure -opensource -static -release -nomake examples -nomake demos -no-qt3support -no-exceptions -no-accessibility -no-stl -no-gif -no-libtiff -no-libmng -no-nis -no-qdbus -no-openssl -no-opengl -no-sm -no-tablet -no-glib -no-fontconfig -no-xrender -no-xrandr -no-xfixes -no-xcursor -no-xinerama -no-xshape -no-sm -no-libtiff -no-gif -no-cups -no-sql-mysql -no-sql-psql -no-sql-sqlite -no-sql-sqlite2

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

Вот мой конфигуре:

/configure -embedded arm -no-armfpa -little-endian -qt-gfx-transformed -qt-gfx-linuxfb -nomake demos -nomake examples -D QT_NO_CURSOR=1 -no-feature-QWS_CURSOR -no-qt3support -no-phonon -no-svg -no-sql-sqlite -confirm-license -static

Только я по-прежнему не понимаю какая разница какая у меня статическая библиотека, если при линковке должны цеплятся только использованные функции

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

Я strip делал, написано в первом сообщении

lisarden
() автор топика

А мож оно все и "использует"... куте вроде к объектам по именам адресуется? 

болтается там где-нибудь

сreateWidgetByName(name_or_identifier x) { 
  switch (x)
    case SCROLLBAR:
        return new Scrollbar;
    case ЕЩЕ_КАКАЯ_ТО_ФИГОВИНА:
        return new Фиговина;
 .... 
  и т д.
}

Вот и получается что все используется. 

gods-little-toy ★★★
()

> Я предполагал, что обычно статически линкуются только те функции, что использованы в программе.

Была тема на лоре как сделать так чтобы линковщик выкинул неиспользуемые функции, поищи.

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