Дополнительные разделяемые библиотеки

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

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

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

Замечу, что это не будет проблемой для дистрибутива на основе источника и для окон. Я собирался помещать двоичные пакеты в теги, но, видимо, у меня нет реплики для монетных тегов.

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

Ответ 1

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

Ответ 2

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