LINUX.ORG.RU

История изменений

Исправление ZenitharChampion, (текущая версия) :

Ну давай хоть ты ответь. Вот смотри. 1). GLIBC обратно совместим и нормально запускает старые программы, а сбои в обратной совместимости остались в 90-х 2). Все остальные библиотеки программа таскает с собой. 3). Что может пойти не так?

Наверное, ты спросишь «в чём отличия от статической линковки». А вот в чём. Если мы собираем программу в CentOS 5 (база стандарта LSB), то если мы скопируем ВСЕ зависимости программы в «lib», а потом вычтем эти библиотеки:

libdl.so.2		libcrypt.so.1
libz.so.1		libncurses.so.5
libutil.so.1		libpthread.so.0
librt.so.1		libpam.so.0
libgcc_s.so.1		libstdc++.so.6
libX11.so.6		libXt.so.6
libGL.so.1		libXext.so.6
libICE.so.6		libSM.so.6
libXi.so.6		libGLU.so.1
libXtst.so.6		libglib-2.0.so.0
libgobject-2.0.so.0	libgmodule-2.0.so.0
libgthread-2.0.so.0	libatk-1.0.so.0
libpango-1.0.so.0	libpangoxft-1.0.so.0
libpangoft2-1.0.so.0	libgdk_pixbuf-2.0.so.0
libgdk_pixbuf_xlib-2.0.so.0	libgdk-x11-2.0.so.0
libgtk-x11-2.0.so.0	libpangocairo-1.0.so.0
libQtCore.so.4		libQtGui.so.4
libQtNetwork.so.4	libQtXml.so.4
libQtOpenGL.so.4	libQtSql.so.4
libQtSvg.so.4		libfontconfig.so.1
libpng12.so.0		libjpeg.so.62
libXrender.so.1		libfreetype.so.6
libXft.so.2		libcairo.so.2
libxml2.so.2		libqt-mt.so.3
libasound.so.2		libcups.so.2
libcupsimage.so.2

То в итоге останется 5 Мб зависимостей. При этом в Ubuntu 13.04 программа запустится, потому что там поддерживается LSB (пруф). А если вместо CentOS скомпилируем в Ubuntu 13.04, то останется 50 Мб зависимостей. Потому что вместо этих версий библиотек компилятор задействует более новые и не совместимые со старыми. Дистрибутивы Linux не таскают в своих /usr/lib по 15 версий одних и тех же библиотек - только две: вон те из списка, и текущие последние версии.

Что может пойти не так? Где в работе программы могут появиться глюки и сбои?

Исходная версия ZenitharChampion, :

Ну давай хоть ты ответь. Вот смотри. 1). GLIBC обратно совместим и нормально запускает старые программы, а сбои в обратной совместимости остались в 90-х 2). Все остальные библиотеки программа таскает с собой. 3). Что может пойти не так?

Наверное, ты спросишь «в чём отличия от статической линковки. А вот в чём. Если мы собираем программу в CentOS 5 (база стандарта LSB), то если мы скопируем ВСЕ зависимости программы в „lib“, а потом вычтем эти библиотеки:

libdl.so.2	libcrypt.so.1
libz.so.1	libncurses.so.5
libutil.so.1	libpthread.so.0
librt.so.1	libpam.so.0
libgcc_s.so.1	libstdc++.so.6
libX11.so.6	libXt.so.6
libGL.so.1	libXext.so.6
libICE.so.6	libSM.so.6
libXi.so.6	libGLU.so.1
libXtst.so.6	libglib-2.0.so.0
libgobject-2.0.so.0	libgmodule-2.0.so.0
libgthread-2.0.so.0	libatk-1.0.so.0
libpango-1.0.so.0	libpangoxft-1.0.so.0
libpangoft2-1.0.so.0	libgdk_pixbuf-2.0.so.0
libgdk_pixbuf_xlib-2.0.so.0	libgdk-x11-2.0.so.0
libgtk-x11-2.0.so.0	libpangocairo-1.0.so.0
libQtCore.so.4	libQtGui.so.4
libQtNetwork.so.4	libQtXml.so.4
libQtOpenGL.so.4	libQtSql.so.4
libQtSvg.so.4	libfontconfig.so.1
libpng12.so.0	libjpeg.so.62
libXrender.so.1	libfreetype.so.6
libXft.so.2	libcairo.so.2
libxml2.so.2	libqt-mt.so.3
libasound.so.2	libcups.so.2
libcupsimage.so.2

То в итоге останется 5 Мб зависимостей. При этом в Ubuntu 13.04 программа запустится, потому что там поддерживается LSB (пруф). А если вместо CentOS скомпилируем в Ubuntu 13.04, то останется 50 Мб зависимостей. Потому что вместо этих версий библиотек компилятор задействует более новые и не совместимые со старыми. Дистрибутивы Linux не таскают в своих /usr/lib по 15 версий одних и тех же библиотек - только две: вон те из списка, и текущие последние версии.

Что может пойти не так? Где в работе программы могут появиться глюки и сбои?