2017-12-27 46 views
0

関連投稿herehereがあります。静的リンクと動的リンクに別々のライブラリが必要なのはなぜですか?

私の理解によると、静的リンクは、ライブラリから実行可能ファイルに直接コード(どのコード?マシンコード?)を挿入します。しかし、動的リンクは参照(ポインタ?)ポイントをライブラリのどこかに挿入するだけです。

私はなぜ同じ機能のライブラリを別々の2つのバージョンにする必要があるのでしょうか?たとえば、intel MKLの場合、libmkl_sequential.aとlibmkl_sequential.soがあります。静的リンクは静的ライブラリをリンクする必要があり、動的リンクは動的ライブラリをリンクする必要があります。 なぜダイナミックリンクは単に静的ライブラリを指すだけではありませんか?

同じ機能の.soと.aの内容の実際の違いは何ですか?

+0

[静的ライブラリと動的ライブラリの違いはリンカ/ローダでどのように使用されているかを無視しています。](https://stackoverflow.com/questions/47116485/differences-between-static-libraries-and-dynamic-ライブラリ - 無視する方法) –

答えて

0

実行したいコードをメモリにロードする必要があります。静的にリンクされた関数はプログラムの一部になるため、プログラムの起動時に両方ともロードされます。

なぜ動的リンクは単に静的ライブラリを指すだけではありませんか?静的ライブラリはディスクファイルですが、これをどのように指しておきたいですか?起動可能なプログラムを調べ、使用したい機能を尋ね、対応するライブラリをメモリにロードするメカニズム(ローダー&バインダー)が必要です。 はい、 "libmkl_sequential.a"と "libmkl_sequential.so"の両方のバージョンのnettoコード(命令)は同じですが、ライブラリの静的および動的タイプには、ライブラリ形式の作成者が指示する別の補助的なメタ情報が必要です。

関連する問題