Я работаю над простым X11-приложением.Динамическая загрузка общих объектов с помощью dlopen()
По умолчанию для моего приложения требуется только libX11.so и стандартные gcc C и math libs. Приложение может расширить функции с помощью Xfixes, Xrender и звуковой системы ALSA. Однако эти функции (Xfixes, Xrender и ALSA) являются необязательными.
Для достижения этой цели я использую загрузку времени выполнения, то есть libXfixes, libXrender и libasound должны быть dlopen() ed.
Следовательно, приложение может функционировать в отсутствие таких библиотек.
Теперь мой вопрос:
What library names should I use when calling dlopen()?
Я заметил, что они отличаются от дистрибутива к дистрибутиву.
Например, OpenSUSE 11, они названы следующие:
- libXfixes.so
- libXrender.so
- libasound.so
В Ubuntu, однако, имена имеют номер версии, прилагаемый, например:
- libXfixes.so.3
- libXrender.so.1
- libasound.so.2
Так пытается открыть "libXfixes.so" потерпит неудачу на Ubuntu, хотя Lib, очевидно, есть. Он просто имеет номер версии прилагается. Так как мое приложение справится с этим?
Должен ли я разрешить сканирование приложения/usr/lib/first вручную, чтобы узнать, какие библиотеки у нас есть, а затем выбрать подходящий? Или у кого-то есть лучшая идея?
Спасибо, ребята,
Энди
Также смотрите ответ здесь: http://stackoverflow.com/questions/15951672/loading-linux-libraries-at-runtime – AjayKumarBasuthkar