2009-08-06 30 views
1

ライブラリに静的にリンクするプログラム(libA.2.0.a)と別のライブラリ(libB.so)に動的にリンクするプログラムがあります。 libB.soもlibA(libA.1.0.so)の古いバージョンに動的にリンクします。同じライブラリを静的および動的にリンクする

この設定は可能ですか?もしそうなら、私のプログラムにはlibA.2.0.aのシンボルを使用し、libB.soのシンボルはlibA.1.0.soのシンボルを使用する方法はどのように分かりますか?

答えて

5

はい、この構成も可能です。

システムでのシンボルの使用方法に関するご質問にお答えするには、ビルド時にすべてのリンクが発生することに注意してください。それがビルドされた後は、 "シンボル"の問題ではなく、さまざまなアドレスでさまざまな関数を呼び出すだけです。

libB.soをビルドすると、libA.1.0.soへのリンクが設定されます。それは、それを使用する他のアプリケーションが何をするかを知らない、または気にせず、独自の関数呼び出しをどのようにマップするかを知っています。

アプリケーション自体をビルドするとき、アプリケーションはlibB.soにリンクします。どんなlibB.so呼び出しでもアプリケーションには完全に知られていません。アプリケーションはlibB.soが気にしないライブラリにも静的にリンクしています。

1つの問題点:libAが静的変数を使用する場合、libB.soからアクセスできる1セットの静的変数と、アプリケーションからアクセス可能な独立した静的なセットがあります。

+0

説明をありがとう!非常に有用な情報。 –

関連する問題