Как бороться с зависимостями в разделяемых библиотеках unix - PullRequest
2 голосов
/ 19 ноября 2010

Я создал динамическую (.so) библиотеку, которая объединяет некоторые функции для необходимого мне бэкэнда хранилища.
Как таковой, он предлагает известный интерфейс и предоставляет бэкэнды для таких вещей, как memcached, mysql, sqlite ..и т. д.

Теперь моя проблема в том, что моя общая библиотека зависит от libmemcached, libsqlite3, libmysqlclient ... и т. д., и я не знаю, как ее упаковать, поскольку клиенты, которым нужен только sqlite, не будутнеобходимо установить libmemcached.

Я думал о том, чтобы разделить его на разные библиотеки, но мне кажется, что я получу почти 20 библиотек .so, и мне не нравится эта идея.

Любая альтернатива?

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

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

init_memcached();
init_sqlite();

Эти функции инициализации вы реализуете с помощью dlopen () и друзей.

2 голосов
/ 19 ноября 2010

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

0 голосов
/ 19 ноября 2010

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

Я бы разделил разделяемую библиотеку, но не на 20 библиотек. Посмотрите, можете ли вы сгруппировать некоторые общие функции.

...