Почему 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
РЕДАКТИРОВАТЬ:
А почему они выбирают этот дизайн, кроме того, что спрашивать их, вы должны догадаться:)
Мое предположение: легче поддерживать драйверы БД в архитектуре плагина: проще в установке, переключаться между версиями, легче доставлять бинарный патч...
Еще одно предположение: единственный способ реализовать некий самоанализ / рефлексию.