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

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

e.g

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. Кто-нибудь может предложить решение?


person anonymous    schedule 01.04.2013    source источник


Ответы (1)


У меня была такая же проблема некоторое время назад. После глубокого исследования я нашел единственный вариант — создать разные исполняемые версии для разных серверов 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

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

person Kiril Kirov    schedule 01.04.2013