История изменений
Исправление 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 версий одних и тех же библиотек - только две: вон те из списка, и текущие последние версии.
Что может пойти не так? Где в работе программы могут появиться глюки и сбои?