На какой дистрибутив Linux я должен ссылаться для лучшей двоичной совместимости?

Мне интересно, какой дистрибутив Linux будет лучше (то есть с наименьшими зависимостями) при компоновке двоичного файла, который должен работать с максимально возможным количеством дистрибутивов с разделяемыми библиотеками.

Я делал это в Ubuntu, но список зависимостей ужасен. SDL представляет PulseAudio и многое другое. Следующим моим предположением было бы использовать Debian lenny - какой, по вашему мнению, лучший дистрибутив для этого?


person Noarth    schedule 23.08.2010    source источник
comment
Голосование за закрытие, поскольку это явно субъективный вопрос, слишком много мнений о разных дистрибутивах ... и это не вопрос программирования ... пожалуйста, обратитесь к Superuser.com или serverfault.com   -  person t0mm13b    schedule 24.08.2010
comment
Я не спрашиваю, какой дистрибутив лучший, я прошу предложений по дистрибутивам, которые будут вводить как можно меньше зависимостей. Дело не в программировании, а в компиляции, что связано с IMO.   -  person Noarth    schedule 24.08.2010


Ответы (4)


Если вы посмотрите документацию QT, http://doc.trolltech.com/4.6/deployment-x11.html в разделе «Создание пакета приложения» они предлагают создать пакет, подобный пакету Mac, со сценарием оболочки для его запуска.

Вы можете сделать то же самое; вам нужно будет создать нужные библиотеки и включить их в свой пакет, что, к сожалению, сделает его больше. По крайней мере, это должно побудить вас ссылаться только на те библиотеки, которые вам нужны :)

person koan    schedule 23.08.2010
comment
Хорошая ссылка, спасибо. Я планирую включить все необходимые общие объекты, кроме библиотек LSB. Вы рекомендуете мне самому собрать необходимые библиотеки? Я, наверное, мог бы построить, например, SDL с небольшим количеством зависимостей, если я это сделаю, но я не уверен, как я могу научить CMake связываться с этим. - person Noarth; 24.08.2010
comment
Я не вижу необходимости перестраивать уже созданные библиотеки, если у вас есть разрешение на их переупаковку с вашим приложением, и ваше приложение будет динамически связываться с ними. Однако, если бы вы создали их самостоятельно, вы бы узнали больше об их зависимостях. - person koan; 24.08.2010
comment
Да, и от некоторых я, наверное, тоже смогу избавиться. Я смотрю на libSDL, которая поставляется с WorldOfGoo и имеет около 6 зависимостей. Однако тот, который устанавливается в Ubuntu, имеет около 10. Кроме того, для этих библиотек требуются более новые версии libstdc ++ и libc, чем они доступны, например. Debian lenny. - person Noarth; 24.08.2010

Если вы не хотите выпускать исходный код и компилировать его в целевых системах с помощью сценария установки, предоставьте все статически связанные или отправьте свои собственные файлы so и используйте переменные среды LD_LIBRARY_PATH и LD_PRELOAD в сценарии, используемом для запуска исполняемого файла. (Пример того, как это делается, можно увидеть в упаковке mozilla firefox)

Также существуют юридические вопросы: НИКОГДА не используйте код GPL. И никогда не связывайте статически с кодом LGPL (среди прочего).

Любое другое решение оставляет слишком много места для удачи или неудачи и не вызовет ничего, кроме разочарования.

person jdehaan    schedule 23.08.2010
comment
О, очень хорошая подсказка со статической компоновкой и кодом LGPL, я бы это пропустил ... - person Noarth; 24.08.2010

Если я правильно помню, связывание с SDL в одном дистрибутиве, который имеет pulseaudio в качестве зависимости SDL, не означает, что ваша программа всегда должна быть связана с pulseaudio в каждом дистрибутиве. На самом деле вам не нужно помещать -lpulseaudio в строку компиляции, не так ли? sdl-config --libs в моем ящике Ubuntu это не указано.

person Karl Bielefeldt    schedule 23.08.2010
comment
В нем нет списка pulseaudio, но если вы проверите libSDL.so с помощью ldd, он будет перечислять pulseaudio среди прочего. - person Noarth; 24.08.2010
comment
Дело в том, что ваш скомпилированный двоичный файл включает только ссылки libSDL.so, а не ссылки на pulseaudio. На целевой машине динамический компоновщик сначала попытается разрешить ваши ссылки на libSDL.so. Затем, если libSDL.so ссылается на другие библиотеки, он будет искать их. Они могут включать pulseaudio, а могут и нет. Ваш двоичный файл будет связан без pulseaudio. - person ypnos; 24.08.2010

Правильный способ создания программного обеспечения для Linux - это поместить один tarball с исходным кодом для каждого выпуска в стабильное место на вашем веб-сайте, а все остальное разрешить дистрибутивам. Не пытайтесь создавать двоичные файлы самостоятельно. Вы избавите себя от нескончаемого запаса горя.

person zwol    schedule 23.08.2010
comment
Это не открытый исходный код. Думаю, в этом и проклятие проприетарного ПО в Linux :) - person Noarth; 24.08.2010
comment
Что ж, в этом случае правильнее всего создать правильные, соответствующие политике пакеты для каждого дистрибутива, который, по вашему мнению, может понадобиться вашим пользователям (я бы сделал по крайней мере Fedora, Debian и SuSE). Люди из Skype делают это, и это очень хорошо работает для конечных пользователей. Для вас это намного больше работы, чем распространение только исходного кода ... но все же меньше работы, чем борьба со статической связью или минимизацией зависимостей. - person zwol; 24.08.2010