質問

Linuxの「C」では、

静的にリンクするには静的ライブラリが必要ですか、それとも十分な共有ライブラリが必要ですか? そうでない場合は、なぜですか? (同じデータが含まれていませんか?)

役に立ちましたか?

解決

はい、静的にリンクされた実行可能ファイルを作成するには静的ライブラリが必要です。

静的ライブラリは、コンパイルされたオブジェクトのバンドルです。ライブラリに静的にリンクすると、そのライブラリのコンパイル結果を取得し、現在のプロジェクトで展開して、自分のオブジェクトであるかのように使用することと実質的に同じです。

動的ライブラリは既にリンクされています。これは、再配置などの一部の情報が既に修正され、破棄されていることを意味します。

さらに、動的ライブラリは位置に依存しないコードとしてコンパイルする必要があります。これは静的ライブラリの制限ではなく、一部の一般的なプラットフォーム(x86など)でパフォーマンスに大きな違いが生じます。

ELF Statifier などのツールが存在します。これらのツールは、動的にリンクされたライブラリを動的にリンクされた実行可能ファイルにバンドルしようとしますが、しかし、すべての状況で正しく機能する結果を生成することは非常に困難です。

他のヒント

静的コンパイルのようなものはなく、静的リンクのみです。そのためには、静的ライブラリが必要です。静的リンクと動的リンクの違いは、前者ではリンク名(コンパイル時直後)で名前が解決され、後者では名前がプログラムの実行開始と同時に解決されることです。

静的ライブラリと動的ライブラリには、多くの要因に応じて、同じ情報が含まれる場合と含まれない場合があります。コードを静的または動的にリンクするかどうかの決定は重要であり、多くの場合、アプリケーションアーキテクチャに影響します。

静的にリンクされたプログラムにリンクするライブラリはすべて、静的バリアントでなければなりません。動的(libfoo.so)ライブラリと静的(libfoo.a)ライブラリには同じ機能がありますが、フォーマットファイルは異なるため、プログラムに一致するタイプが必要です。

別のオプションはErmineです( http://magicErmine.com ) これは、修飾子のようなものですが、メモリのランダム化に対処できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top