私は共有ライブラリA.so
を持っています。関数foo()が定義されています。このfoo()関数は共有ライブラリlibnl-1.soに依存します。関係は以下の通りです。プログラムは2つの競合する共有ライブラリを使用します
A.so
{
foo() => libnl-1
}
私はプログラムapp
を持っています。それはfoo()
とbar()
という2つの関数を呼び出します。 bar()
にはlibnl、libnl-3の別のバージョンが必要です。関係は以下の通りです:
app {
foo()
bar() => libnl-3
}
私はcc -o app -lnl-3 -lA
を使用してアプリケーションをコンパイルしました。しかし、私は常に私のアプリがクラッシュするのを発見しました。 foo()がlibnl-1の代わりにlibnl-3を呼び出しているようです(私はこれを確認する方法はわかりません)。誰か助けてくれますか?私がこれをやりたいのであれば、どうしたらいいですか?リンク順序を変更しますか?
'$ LD_DEBUG = all。/ app'を使って、ダイナミックリンカがシンボルをプログラムにインポートする場所を調べることができます。 – Sergio
1つのライブラリの2つのバージョンを同時にリンクするのはなぜ良い考えだと思いますか?あなたは本当にあなたがやっていることを考え直す必要があります。そうすれば、ライブラリの1つのバージョン、好ましくは最新のものだけを使用することができます。 –
あなたのケースでは、なぜ答えがhttp://stackoverflow.com/questions/228117/loading-multiple-shared-libraries-with-different-versions?rq=1で役に立たないのですか? (私はちょうどC&Pはあなたが彼らがクローズソースなので、libsから必要な2つの関数を作ることはできません) – deamentiaemundi