прямая совместимость приложения occi

У нас есть OCCI приложение, которое динамически связано с occi либ на Solaris, Теперь во время сборки мы связали это с occi из Oracle 10.2.0.4 клиент, но мы хотим, чтобы одна и та же сборка могла работать как с клиентом Oracle 10G, так и с клиентом Oracle 11G. Но похоже что occi не является обратно совместимым как имя динамического occi В lib есть версия.

например

md1sisun26:/tools/oracle/10.2.0.4/lib->dump -Lv libocci.so

libocci.so:

**** DYNAMIC SECTION INFORMATION ****
.dynamic:
[INDEX] Tag Value
[1] INIT 0xc6110
[2] FINI 0xc62b8
[3] SONAME libocci.so.10.1
[4] RUNPATH TLD_GLOBAL
[5] RPATH TLD_GLOBAL
[6] HASH 0xe8
[7] STRTAB 0x10488
[8] STRSZ 0x1fb42
[9] SYMTAB 0x41e8
[10] SYMENT 0x18
[11] CHECKSUM 0x25a3
[12] PLTSZ 0x4c80
[13] PLTREL 0x7
[14] JMPREL 0x3c450
[15] RELA 0x2ffd0
[16] RELASZ 0x11100
[17] RELAENT 0x18
[18] REGISTER 0x72
[19] REGISTER 0x86
[20] FEATURE_1 PARINIT
[21] FLAGS 0
[22] FLAGS_1 [ DISPRELDNE ]
[23] PLTGOT 0x1eb500
md1sisun26:/tools/oracle/10.2.0.4/lib->ls -lrt libocci.so
lrwxrwxrwx 1 oracle 15 Aug 10 2010 libocci.so -> libocci.so.10.1*

Как вы можете видеть, когда мы запускаем наше приложение occi под клиентом Oracle 11G, оно перестает работать, так как нет libocci.so.10.1, Кто-нибудь может предложить решение?

0

Решение

У меня была такая же проблема некоторое время назад. После глубокого исследования единственная возможность, которую я нашел, заключалась в том, чтобы создавать разные исполняемые версии для разных серверов ORACLE (соответственно, связанных с разными версиями библиотеки).

Конечно, это можно сделать по-другому — во время выполнения определите, какая версия библиотеки вам нужна, установите обе версии и динамически загрузите правильную версию библиотеки, используя dlopen, Но я никогда не пробовал этого, поскольку на самом деле мне это не нужно. Но это может сработать, поскольку обе версии библиотеки могут быть установлены на одном компьютере одновременно, не конфликтуя друг с другом. Звучит возможно для меня.


Вот две ссылки, которые могут быть полезны:

Первый показывает, что вам нужно иметь конкретную версию библиотеки для вашей конкретной среды. Моя проблема заключалась в том, что я должен был иметь occi 10.2.0.4 на RHEL5, который поставляется с libstdc++.so.6, в то время как occi 10.2.0.4 зависит от libstdc++.so.5, только Решением было написать на форуме OCCI (вторая ссылка), где через некоторое время мне дали правильную сборку, которая была occi 10.2.0.4 построен с libstdc++.so.6 а не с libstdc++.so.5

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]