Дополнительные общие библиотеки - PullRequest
11 голосов
/ 23 декабря 2011

Я заметил сбой в работе приложений, зависящих от разделяемых библиотек: что если вам не хватает какой-либо зависимости, приложение выйдет из строя во время загрузки , даже если пользователь не намерен использовать функциональность зависимости.

Я бы хотел, чтобы мои приложения были лучше.В идеале, вместо того, чтобы распространять до n разных пакетов, где n = numberOfSupportedArchitectures * numberOfSupportedOS * ∏ (для каждой общей библиотеки) (количество альтернатив) Я бы обнаружил «ошибку при загрузке общих библиотек»исключение выдается во время загрузки, когда обнаруживается, что библиотека, которая мне нравится - но не нужна, - продолжает выполнение таким образом, чтобы просто избежать использования неразрешенных ссылок.Но, очевидно, нет исключения, которое можно поймать.Если чего-то не хватает, все это падает до того, как main () даже запускается.

Самым близким, что я могу получить, чтобы получить контроль над процессом загрузки, является разрешение всех ссылок самостоятельно с помощью dlopen, dlsym и тому подобного.Так утомительно.Я ожидаю, что уже будет библиотека для этого?

Я отмечаю, что это не будет проблемой ни в исходном дистрибутиве, ни в Windows.Я собирался поместить бинарные пакеты в теги, но, очевидно, у меня нет тегов rep to coin.

'кажется, что наиболее элегантное решение заключается в уточнении поведения загрузчика / компоновщиков ОС.

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Вы можете взглянуть на слабые символы .Однако это не является частью стандарта C или C ++, поэтому немного зависит от компилятора.Но если вы идете в GCC, он будет работать для вас, я думаю.

0 голосов
/ 23 декабря 2011

Вы можете включить совместно используемые библиотеки и настроить путь поиска компоновщика с помощью -rpath $ORIGIN.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...