0

我们有一个OCCI动态链接到occilib on的应用程序Solaris。现在在构建期间,我们将它与客户端链接occiOracle 10.2.0.4但我们希望相同的构建能够在 Oracle 10G 客户端和 Oracle 11G 客户端下运行。但它似乎occi不向后兼容,因为动态occi库的名称中有一个版本。

例如

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*

正如您所见,当我们在 Oracle 11G 客户端下运行 occi 应用程序时,它会失败,因为没有libocci.so.10.1. 任何人都可以提出解决方案吗?

4

1 回答 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.4libstdc++.so.6而不是用libstdc++.so.5

幸运的是,你不会有这样的问题,但我决定,这可能对你有用。

于 2013-04-01T10:46:41.573 回答