質問

エクスポートされる同じシンボル名を持つ2つのサードパーティライブラリがあります。実行可能ファイルがロードされると、通常 ld が間違ったものを選択し、結果としてクラッシュします。これらのライブラリのコンテンツについてあまり多くのことをすることはできないので、適切な実装を見つける方法を ld に指示する方法があるかもしれません。

OS-Solaris 10、私のプログラムはautoconf / autotools / gccによって構築され、競合するライブラリは libclntsh (Oracleドライバの一部)とOpenLDAPです。残念ながら、LDAPクライアントのOracleの実装は使用できません。OpenLDAPの多くの機能が欠けています。

編集済み:リンケージは次のとおりです:libclntsh.so-<!> gt; A.so-<!> gt; MAIN <!> lt; -B.so <!> lt; -libldap_r.so

役に立ちましたか?

解決

コンパイル時に両方の共有ライブラリをリンクする必要がない場合(質問から明らかではない)、共有ライブラリに-Bdirectを使用できます。これにより、共有ライブラリのすべてのシンボルが検出された場所で記録されます。実行時に(他の共有ライブラリから)シンボルの2番目の定義が表示される場合、無視されます。

他のヒント

1つの解決策は、LD_PRELOAD環境変数を、シンボルを優先するライブラリに設定することです。 (そのライブラリに独自の共有ライブラリ依存関係がある場合、その依存関係をすべてプリロードする必要がある場合があります。スペースで区切られた依存ライブラリのリストに<=>を設定するだけです。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top