問題タブ [static-linking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 「COMMON」セクション以外のセクションのシンボルをソートするにはどうすればよいですか?
GNU リンカ「ld」は、COMMON セクション シンボルと呼ばれる初期化されていないグローバル パラメータをサイズでソートするオプション「-sort-common」を提供します。リンカがシンボルを偶数アドレスに位置合わせする場合、このオプションはセクションの穴を最小限に抑えるのに役立ちます。たとえば、次のように定義するとします。
--main.c
char a;
短いb;
char c;
int main() { return 0; }
「sort-common」なしで main.o にコンパイルすると、「a」のアドレスと「b」のアドレスの間に 1 バイトの「穴」ができます。「sort-common」を使用すると、リンカーはパラメーターを「a、c、b」に並べ替えます。a のサイズは 1 バイトで、c のサイズは 1 バイトであるため、アドレス間に「穴」はありません。私の問題は、私のコードが次のようになることです:
--main.c
文字 a = 0;
短いb = 0;
char c = 0;
...
この場合、a、b、および c は BSS セクションにあります。つまり、"sort-common" はそれらに影響しません。
「COMMON」セクション以外のセクションのシンボルをソートするにはどうすればよいですか?
また、LD スクリプトの多くのオプションを検索しましたが、うまくいきませんでした。
更新:segment_flags の「Order」値について読んだことがありますが、その使用方法がわかりませんでした。どんな助けもかなりのものです。
c++ - 静的リンクと動的リンク
特定の状況で動的リンクよりも静的リンクを選択したり、その逆を選択したりする魅力的なパフォーマンス上の理由はありますか? 私は次のことを聞いたり読んだりしましたが、その真実性を保証するのに十分な知識がありません.
1) 静的リンクと動的リンクの間の実行時パフォーマンスの違いは、通常は無視できます。
2) プロファイル データを使用してプログラムのホットパスを最適化するプロファイリング コンパイラを使用する場合、(1) は当てはまりません。これは、静的リンクを使用すると、コンパイラがコードとライブラリ コードの両方を最適化できるためです。動的リンクでは、コードのみを最適化できます。ほとんどの時間がライブラリ コードの実行に費やされている場合、これは大きな違いを生む可能性があります。それ以外の場合は、(1) が引き続き適用されます。
c++ - C ++アプリケーション-ライブラリに静的リンクまたは動的リンクを使用する必要がありますか?
Boostライブラリ、log4cxx、またはgoogleロギングライブラリの一部を含む一連のライブラリに依存する新しいC ++プロジェクトを開始します。プロジェクトが進化するにつれて、他のライブラリも進化します(まだ予測できません)。 。
32ビットシステムと64ビットシステムの両方で実行する必要があります。おそらく、必要なすべてのライブラリやsu特権が利用できるとは思わない、非常に多様なLinux環境で実行する必要があります。
私の質問は、これらすべてのライブラリに動的または静的にリンクしてアプリケーションを構築する必要があるかどうかです。
ノート:
(1)静的リンクは開発中に苦痛になる可能性があることを認識しています(コンパイル時間の延長、32ビットと64ビットの両方のクロスコンパイル、依存関係チェーンを下げてすべてのライブラリを含めるなど)が、テスト中ははるかに簡単です-ファイルを移動して実行するだけです。
(2)一方、動的リンクは開発段階で簡単になります-コンパイル時間が短く(32ビット開発環境から64ビットライブラリへの動的リンクを処理する方法がよくわかりません)、依存関係の連鎖に煩わされることはありません。一方、新しいバージョンの展開は醜い場合があります。特に、新しいライブラリが必要な場合(対象のマシンにsu権限がない、またはこれらのライブラリが利用できないという上記の条件を参照)。
(3)このトピックに関連する質問を読みましたが、どのアプローチが私のシナリオに最も適しているかを実際に理解できませんでした。
結論:
- ご意見ありがとうございました!
- 私はおそらく静的リンクを使用します。理由は次のとおりです。
- より簡単な展開
- パフォーマンス中の予測可能なパフォーマンスとより一貫した結果。テスト(このペーパーを参照してください:http://www.inf.usi.ch/faculty/hauswirth/publications/CU-CS-1042-08.pdf)
- 指摘したように、静的と動的のコンパイルのサイズと期間はそれほど大きな違いではないようです
- より簡単でより速いテストサイクル
- 私はすべての開発者を維持することができます。私の開発者のサイクル。マシーン
linker - VS2005 で MDd dll を使用する MTd プロジェクトをビルドする方法
プロジェクト プロパティ ->c/c++ ->CodeGeneration ->RuntimeLib: MTd (静的 CRT ライブラリ LIBCMTD を使用) を使用して、Visual Studio 2005 でアプリケーションをビルドしています。アプリケーションは、MDd に組み込まれているサードパーティの dll とライブラリを使用しています (動的 CRT lib-MSVCRTD を使用)。
MSVCRTD.lib(MSVCR80D.dll): error LNK2005: __mktime64 already defined in LIBCMTD.lib(mktime64.obj) MSVCRTD.lib(MSVCR80D.dll): error LNK2005: __gmtime64 already defined in LIBCMTD lib(gmtime64.obj) MSVCRTD.lib(MSVCR80D.dll): エラー LNK2005: __localtime64 はすでに LIBCMTD.lib(loctim64.obj) で定義されています
サードパーティの設定を変更できません。CRT ライブラリを動的に使用すると、アプリケーションは正常に動作しますが、これを変更することはできません。
ありがとう
c - lib への静的リンクと DLL の要求
Visual Studio 2008 を使用して、ライブラリ.H
の.LIB
ファイルがあります。プログラムを作成し、プロジェクトのプロパティを介して LIB を参照しました。コンパイルは問題なく実行されますが、実行時に DLL のインストールを求められます。DLL が と同じディレクトリにあるEXE
場合LIB
は機能しますが、.
static - 静的ライブラリ (.a) で共有ライブラリ (.so) を作成する SCons
SCons に共有ライブラリを作成させようとしています。に入る項目の 1 つは.so
静的.a
ライブラリです。
次のような行があります。
そして、それを実行すると、次のエラーが発生します。
.a
ただし、次のようなコマンドを使用して共有ライブラリを作成できることはわかっています。
これを機能させるためのアイデアや回避策は大歓迎です。
-shared
関連する質問: 呼び出しの LINK コマンド ラインに追加の文字列を配置するように scons を取得するにはどうすればよいProgram()
ですか? これができれば、私のニーズを満たすことができると思います。
linux - ブーストを静的にリンクしようとしています
Boostライブラリを使用して、Linux、Eclipse CDT、g ++で作業しています。Boostスレッドを使用する既存のプログラムがあり、動的ではなく静的にリンクしようとします。/usr/local/lib ディレクトリには、次のファイルが含まれています。
動的リンクは次のように機能します。
静的リンク:
次のような膨大な数のメッセージが生成されます。
「pthread_mutex_init」への未定義の参照
Boost ライブラリに静的にリンクするにはどうすればよいですか?
c++ - OS Xのどのダイナミックライブラリを当然のことと見なすことができますか?
インストールを容易にするためにOSXプログラムを可能な限り自己完結型にしたい場合、誰もが、またはほとんどの人が持つことを期待できるダイナミックライブラリは何ですか?それを知っていれば、すべての静的ライブラリをコンパイルする必要はありません。
linux - ライブラリを静的にリンクすることの長所と短所は何ですか?
LinuxとWindowsの両方で趣味で開発したアプリケーションをリリースしたいです。このアプリケーションは、ブースト(および場合によっては他のライブラリ)に依存します。この種のアプリケーション(チェスエンジン)の標準は、実行可能ファイルと、場合によってはいくつかのヘルパーファイルのみを提供することです。
実行可能ファイルに依存関係がないように、ライブラリを静的にリンクすることをお勧めします。したがって、エンドユーザーは実行可能ファイルをディレクトリに配置して使用を開始できます。
ただし、オンラインで調査を行っているときに、静的にリンクされたライブラリについて否定的なコメントを見つけました。静的にリンクされたライブラリを使用するアプリケーションは移植性が低く、非常に類似したシステムのシステムでのみ実行されると主張する人もいました。
では、静的にリンクするライブラリの長所と短所は何ですか?
実行可能ファイルが大きくなることはすでに知っています。しかし、なぜそれが私のアプリケーションの移植性を低下させるのかわかりません。