0

lib onOCCIに動的にリンクされているアプリケーションがあります。ビルド中にクライアントとリンクしましたが、同じビルドをOracle 10GクライアントとOracle 11Gクライアントで実行できるようにしたいと考えています。しかし、動的ライブラリの名前にバージョンが含まれているため、下位互換性がないようです。occiSolarisocciOracle 10.2.0.4occiocci

例えば

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 サーバー用にさまざまな実行可能バージョンをビルドすることでした (それぞれ、さまざまなバージョンのライブラリにリンクされています)。

もちろん、これは別の方法で行うこともできます。つまり、必要なライブラリのバージョンをランタイムが識別し、両方のバージョンをインストールして、.xml を使用して正しいバージョンのライブラリを動的にロードしますdlopen。しかし、実際には必要なかったので、これを試したことはありません。ただし、両方のライブラリ バージョンが互いに競合することなく同時に同じマシンにインストールできる限り、機能する可能性があります。私には可能に思えます。


参考になるかもしれない 2 つのリンクを次に示します。

最初のものは、特定の環境に特定のライブラリ バージョンが必要であることを示しています。私の問題は、 RHEL5に依存してocci 10.2.0.4いるのに付属している RHEL5 を使用する必要があることでした。唯一の解決策は、OCCI のフォーラム (2 番目のリンク) に書き込むことでした。しばらくすると、正しいビルドが提供されました。libstdc++.so.6occi 10.2.0.4libstdc++.so.5occi 10.2.0.4libstdc++.so.6libstdc++.so.5

幸いなことに、そのような問題は発生しませんが、これが役に立つと判断しました。

于 2013-04-01T10:46:41.573 に答える