Почему RWDBManager :: database требует общего имени библиотеки? - PullRequest
1 голос
/ 07 февраля 2011

Я использую библиотеку 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 Ответ

1 голос
/ 07 февраля 2011

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

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

my2c

EDIT:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...