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