タグ付けされた質問 「dynamic-linking」


16
静的リンクと動的リンク
特定の状況で動的リンクよりも静的リンクを選択する、またはその逆を選択する、説得力のあるパフォーマンス上の理由はありますか?私は次のことを聞いたり読んだりしましたが、その真実性を保証する主題については十分に知りません。 1)静的リンクと動的リンクの実行時パフォーマンスの違いは、通常は無視できます。 2)(1)は、プロファイルデータを使用してプログラムのホットパスを最適化するプロファイリングコンパイラーを使用している場合は当てはまりません。静的リンクを使用すると、コンパイラーはコードとライブラリコードの両方を最適化できるためです。動的リンクを使用すると、コードのみを最適化できます。ほとんどの時間がライブラリコードの実行に費やされている場合、これは大きな違いを生む可能性があります。それ以外の場合は、(1)が引き続き適用されます。

5
「静的にリンクされた」および「動的にリンクされた」とはどういう意味ですか?
「静的にリンクされた」および「動的にリンクされた」という用語をよく耳にしますが、C、C ++、またはC#で記述されたコードを指すことがよくあります。彼らは何であり、彼らは何を話しているのですか、そして彼らは何を結び付けていますか?

4
CからGo関数を呼び出す
Cプログラム(たとえば、カーネルモジュールなど)とのインターフェイスとしてGoで記述された静的オブジェクトを作成しようとしています。 GoからのC関数の呼び出しに関するドキュメントは見つかりましたが、他の方法についてはあまりわかりません。私が見つけたのは、それは可能ですが複雑であるということです。 これが私が見つけたものです: CとGo間のコールバックに関するブログ投稿 Cgoのドキュメント Golangメーリングリストの投稿 誰もがこれを経験していますか?つまり、完全にGoで記述されたPAMモジュールを作成しようとしています。

2
ライブラリを静的にリンクするようにgccに直接指示する
静的にリンクするライブラリを指定-Wl,-Bstaticするために使用するのは不思議ですgcc。結局のところgcc、ライブラリ(-Ldir、-llibname)とのリンクに関する他のすべての情報を直接伝えています。 どのライブラリを静的にリンクする必要があるかをgccドライバに直接伝えることは可能ですか? 明確化:特定のライブラリーが静的バージョンにのみ存在する場合、それを使用せずにそれを使用することを知っています-Wl,-Bstaticがgcc、静的ライブラリーを優先することをほのめかしたいと思います。ライブラリファイルを直接指定するとリンクされることも知っていますが、静的ライブラリと動的ライブラリを同じように含めるためのセマンティックを維持することを好みます。

1
動的にリンクされると、共有ライブラリのグローバル変数と静的変数はどうなりますか?
グローバルと静的変数を持つモジュールがアプリケーションに動的にリンクされたときに何が起こるかを理解しようとしています。モジュールとは、ソリューション内の各プロジェクトを意味します(ビジュアルスタジオでよく仕事をしています!)。これらのモジュールは、*。libまたは* .dllまたは* .exe自体に組み込まれています。 アプリケーションのバイナリには、データセグメント内の個々のすべての翻訳単位(オブジェクトファイル)のグローバルデータと静的データ(およびconstの場合は読み取り専用データセグメント)が含まれていることを理解しています。 このアプリケーションがロード時の動的リンクを備えたモジュールAを使用するとどうなりますか?DLLにはグローバルとスタティックのセクションがあると思います。オペレーティングシステムはそれらをロードしますか?もしそうなら、彼らはどこにロードされますか? そして、アプリケーションがランタイム動的リンクでモジュールBを使用するとどうなりますか? アプリケーションにAとBの両方を使用する2つのモジュールがある場合、AとBのグローバルのコピーは以下のように作成されますか(それらが異なるプロセスの場合)? DLL AおよびBはアプリケーショングローバルにアクセスできますか? (理由も記入してください) MSDNからの引用: DLLソースコードファイルでグローバルとして宣言された変数は、コンパイラとリンカーによってグローバル変数として扱われますが、特定のDLLをロードする各プロセスは、そのDLLのグローバル変数の独自のコピーを取得します。静的変数のスコープは、静的変数が宣言されているブロックに限定されます。その結果、各プロセスには、デフォルトでDLLグローバル変数と静的変数の独自のインスタンスがあります。 そしてここから: モジュールを動的にリンクする場合、異なるライブラリが独自のグローバルのインスタンスを持っているかどうか、またはグローバルが共有されているかどうかが不明確になることがあります。 ありがとう。

4
リンカーは何をしますか?
私はいつも疑問に思っていました。コンパイラは、あなたが書いたコードをバイナリに変換することを知っていますが、リンカは何をしますか?彼らはいつも私にとって謎でした。 「リンク」とは大まかに理解しています。ライブラリとフレームワークへの参照がバイナリに追加されたときです。それ以上はわかりません。私にとってはそれは「うまくいく」だけです。動的リンクの基本も理解していますが、あまり深くありません。 誰かが用語を説明できますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.