Почему RWDBManager::database требует общего имени библиотеки?

Я использую библиотеку Roguewave для подключения к базе данных Sybase из C++. Я понимаю, что объект базы данных построен как:

  RWDBManager::database("accessLib", "", "", "", "", "XA=lrm_name");

http://www2.roguewave.com/support/docs/sourcepro/edition8/html/dbxaug/5-3.html говорит

All arguments are of type RWCString. Note that establishing an XA connection to the Sybase CT database requires only two of the six database() arguments, as described here:

  accessLib

  The argument for the first parameter is the same as that which you provide for the non-XA connection.

  For static libraries, supply the string "SYBASE_CT".

  For shared libraries, supply the name of your shared access library, for example "libctl420d.so". 

Я не понимаю

В коде я привык видеть, что когда нам нужно использовать что-то, предоставленное в библиотеке, включать заголовки этих библиотек, использовать классы / функции из этих библиотек, а затем при компиляции вашего проекта использовать эту библиотеку в списке LDLIBRARIES. Почему для базы данных функций здесь нужно ИМЯ библиотеки? Каковы преимущества этого подхода по сравнению с #include.

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

Спасибо,

1 ответ

Решение

Вероятно, потому, что они динамически загружают библиотеку, используя ее имя и стандартный вызов, такой как dlopen() в системах POSIX. Есть эквивалент в Windows, я думаю, что это LoadLibrary(), С такой системой вы можете загружать библиотеку и получать символы из нее. Очень удобно создавать плагин системы или тому подобное. Это также позволяет вам использовать некоторые библиотеки повышения производительности, только если они присутствуют...

Смотрите здесь, например...

my2c

РЕДАКТИРОВАТЬ:

А почему они выбирают этот дизайн, кроме того, что спрашивать их, вы должны догадаться:)

Мое предположение: легче поддерживать драйверы БД в архитектуре плагина: проще в установке, переключаться между версиями, легче доставлять бинарный патч...

Еще одно предположение: единственный способ реализовать некий самоанализ / рефлексию.

Другие вопросы по тегам