LINUX.ORG.RU

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

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

Не только с Glibc. Собирать с более старыми версиями библиотек тоже бывает полезно в плане максимального охвата поддерживаемых дистрибутивов. Бывает по-разному. Например, собирать со старым Boost нет смысла, лучше притянуть новый из EPEL. А собрать со старым Xorg и GTK есть смысл. И вот почему.

Например, пытаясь запустить новый Google Chrome в старых линуксах, он не нашёл какой-то вызов в libXfixes. Пытаясь запустить Transmission, собранный с более новым GTK, я наблюдал то же самое.

Когда я компилировал программы, компилятору было не важно, какой GTK я ему подсовываю: 3.4 или 3.10. Но если я компилировал с 3.10, а запускаю с 3.4, тогда ругается на отсутствие какого-то вызова, а если наоборот, тогда всё прекрасно. Это называется обратная совместимость. А когда можно компилировать с новой библиотекой, а запускать со старой, тогда прямая совместимость.

Это потому что в том же GTK иногда меняют одни вызовы на другие, но старые не удаляют, а оставляют им для обратной совместимости со старыми бинарниками, собранными с более старым GTK. А удалять старые вызовы будут в GTK+4, вместе с переименованием библиотек (цифру сделают на один больше).

Хотя бывает, что компилятор не хочет принимать старый GTK. Например в одном проекте явно поменяли старые вызовы на новые, в преддверии подготовки к GTK+3. Таким образом, повысили требования к GTK с 2.10 до 2.24. И чтобы собрать в CentOS 6 (где 2.18), мне пришлось заменить вызовы вида:

gtk_widget_set_tooltip_text(w, dialog_message(idc));

на:

GtkTooltips *tooltip = gtk_tooltips_new();
gtk_tooltips_set_tip(tooltip, w, dialog_message(idc), NULL);

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

Не только с Glibc. Собирать с более старыми версиями библиотек тоже бывает полезно в плане максимального охвата поддерживаемых дистрибутивов. Бывает по-разному. Например, собирать со старым Boost нет смысла, лучше притянуть новый из EPEL. А собрать со старым Xorg и GTK есть смысл. И вот почему.

Например, пытаясь запустить новый Google Chrome в старых линуксах, он не нашёл какой-то вызов в libXfixes. Пытаясь запустить Transmission, собранный с более новым GTK, я наблюдал то же самое.

Когда я компилировал программы, компилятору было не важно, какой GTK я ему подсовываю: 3.4 или 3.10. Но если я компилировал с 3.10, а запускаю с 3.4, тогда ругается на отсутствие какого-то вызова, а если наоборот, тогда всё прекрасно.

Это потому что в том же GTK иногда меняют одни вызовы на другие, но старые не удаляют, а оставляют им для обратной совместимости со старыми бинарниками, собранными с более старым GTK. А удалять старые вызовы будут в GTK+4, вместе с переименованием библиотек (цифру сделают на один больше).

Хотя бывает, что компилятор не хочет принимать старый GTK. Например в одном проекте явно поменяли старые вызовы на новые, в преддверии подготовки к GTK+3. Таким образом, повысили требования к GTK с 2.10 до 2.24. И чтобы собрать в CentOS 6 (где 2.18), мне пришлось заменить вызовы вида:

gtk_widget_set_tooltip_text(w, dialog_message(idc));

на:

GtkTooltips *tooltip = gtk_tooltips_new();
gtk_tooltips_set_tip(tooltip, w, dialog_message(idc), NULL);