2011-09-16 17 views
1

これは可能かどうかを尋ねる宿題です。私はそれに対する答えが「はい」だと信じていますが、「なぜ?」という質問に対する答えは分かりません。私には、答えは単純に「なぜではないのですか」のように思えます...誰かがこれがなぜ真実であるか(または間違っていれば、真実ではない)より深い洞察を提供できますか?この質問は難しい部分がある場合にのみ質問されるようですが、私がコンパイルについて理解していることから、両方にリンクできないようなものはないようです。UNIX:実行可能ファイルを静的ライブラリと動的ライブラリの両方にリンクしていますか?

+0

どうやったらいいですか?それを試しましたか?それは動作しましたか? ;-) がんばろう! – shellter

答えて

1

はい、もちろん、静的ライブラリと動的ライブラリの両方をリンクすることができます。静的ライブラリへのリンクは、アーカイブから必要なオブジェクトファイルを取得し、それらをリンクプロセスに含めることと本質的に同じです。

リンク先のスタティックライブラリとダイナミックライブラリがの同じライブラリの場合、ダイナミックリンクは冗長です。それでもやることは許されていますが、無意味です(少なくとも、Unixでは実行可能ファイルに不必要なランタイム依存性が導入されるだけです)。

+1

FreeBSDやLinuxのような単一のリンカーシンボルスペースを持ついくつかの* nixでは、静的で共有されている同じlibをリンクすることは実際には不可能かもしれません。 –

1

一般に、静的ライブラリと動的ライブラリの両方にリンクできない理由はありません。特に、競合しない場合(たとえば、同じシンボルを指定するなど)は避けてください。これを行う仕組みはコンパイラによって異なりますが、多くのフリーソフトウェアプロジェクトが実際にこれを行います。いわゆる「コンビニエンスライブラリ」を静的に構築し、動的にリンクされた実行可能ファイルにリンクします。

+0

私は「なぜ?」という質問に答えるのが難しいと思います。あなたができない理由がないからといっているようです。 –

+0

@Logan私が思いつくことができる最良の答えは、リンカのコマンドライン(ao bo co)上の一連のオブジェクトとそれらを含む静的ライブラリ(libfoo.a )。最初のケースでは、共有ライブラリとリンクすることも可能であることは明らかです.2番目のケースはほぼ同等であるため、共有ライブラリとリンクすることもできます。 –

関連する問題