У меня только один ПК с установленным Linux. Однако у меня есть несколько версий одной и той же библиотеки. Поскольку разное программное обеспечение может зависеть от разных версий одной и той же библиотеки, мне приходится держать их все в системе.
Есть ли у вас какие-нибудь хорошие идеи, как поддерживать их в рабочем состоянии?
Любые ссылки приветствуются.
[Обновлять]
Например:
У меня есть две версии g++, например g++4.8 и g++5.2.
Я хочу, чтобы их связанные файлы хранились по разным путям, например:
/soft/g++/4.8/
и/soft/g++/5.2
Когда я использую g++, я могу легко изменить версию простой командой. Я нашел Software Environment Managementhttp://modules.sourceforge.net/
решение1
Если ваша библиотека определяет ееsonameправильно, вы можете иметь несколько версий установлены без каких-либо трудностей. Например, у меня в настоящее время libreadline
установлены три версии:
$ ls -l /lib/x86_64-linux-gnu/libreadline.so.*
lrwxrwxrwx 1 root root 18 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5 -> libreadline.so.5.2
-rw-r--r-- 1 root root 263352 Dec 4 2015 /lib/x86_64-linux-gnu/libreadline.so.5.2
lrwxrwxrwx 1 root root 18 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6 -> libreadline.so.6.3
-rw-r--r-- 1 root root 296792 Oct 4 2016 /lib/x86_64-linux-gnu/libreadline.so.6.3
lrwxrwxrwx 1 root root 18 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7 -> libreadline.so.7.0
-rw-r--r-- 1 root root 309168 Jan 24 16:17 /lib/x86_64-linux-gnu/libreadline.so.7.0
Это работает, потому что программы ссылаются на soname, поэтому все, что создано для версии 5, ссылается на libreadline.so.5
, все, что создано для версии 6, ссылается на libreadline.so.6
и т. д. Требование со стороны библиотеки заключается в том, что все версии с одинаковым soname должны сохранять свой ABI: новые версии могут добавлять функции, но они не могут нарушать существующие функции. Любое ломающее изменение подразумевает повышение soname.
Если все это сделано правильно (со стороны библиотеки), вам никогда не понадобится несколько версий библиотеки стакой жеsoname: пока у вас последняя версия, вы сможете запустить любое программное обеспечение, созданное с использованием любой версии библиотеки с тем же soname. Продолжая пример libreadline
, программное обеспечение, созданное с использованием версии 5.1 библиотеки, отлично работает с версией 5.2. (Обратное не обязательно верно; программное обеспечение, использующее новые функции в 5.2, не будет работать с 5.1.)
Возможно, стоит обратить на него внимание libtool
(да, я знаю), если вы им еще не пользуетесь: он имеет вполне пригодную для использования структуру.схема управления версиямикоторый обрабатывает скачки soname.
Некоторые библиотеки идут на крайние меры, чтобы свести к минимуму необходимость в изменении soname; примером может служить библиотека GNU C, которая широко использует управление версиями символов, чтобы избежать нарушения ABI, при этом все еще внедряя новые функции и изменения, несовместимые с предыдущими версиями (она просто сохраняет старые версии,внутрибиблиотека).