問題タブ [incremental-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++ - インクリメンタル リンクにもかかわらず、ライブラリが変更されると、Exe はフル リンクを実行します。
実行可能ファイル、いくつかの独自の静的ライブラリ、およびいくつかのプリコンパイル済み静的サード パーティ ライブラリで構成される MSVC++ プロジェクトがあります。exe はビルド時間を短縮するためにインクリメンタル リンクを使用します。
実行可能プロジェクト内の .cpp ファイルを変更すると、コンパイルとリンクは非常に高速です (10 秒未満)。
しかし、自分のライブラリの 1 つで .cpp ファイルを変更すると、実行可能プロジェクトは、使用するすべてのライブラリに対して完全なリンクを実行しているように見えます。
実際に完全なリンクであるかどうかはわかりませんが、「vc90.pdb not found」リンカー警告から、まったく変更されていない外部ライブラリにリンクしていることがわかります。
プロジェクト構造の例を次に示します。
- コンパイル済みのサードパーティ ライブラリ
ExtLib1
、ExtLib2
およびExtLib3
- 独自のライブラリ
MyLib
、サードパーティのライブラリを使用ExtLib1
MyExe
とを使用してMyLib
自分の Exe 、ExtLib1-3
で .cpp ファイルを変更するMyLib
と、インクリメンタル リンクがオンになっている場合でも、 、、およびにMyExe
リンクされます。MyLib
ExtLib1
ExtLib2
ExtLib3
私のプロジェクトでは完全なリンクに約 5 分かかるので、質問しています:変更されたライブラリのみを再リンクする方法はありますか?
c++ - インクリメンタル リンクが実行速度に与える影響は?
インクリメンタル リンクがプログラムの実行速度に与える影響について知りたいです。
インクリメンタル リンクにより、関数とデータの間にパディングが追加され、実行可能ファイルが大きくなり、場合によっては、キャッシュの使用が最適化されないため、影響が加速する可能性があることを私は知っています。Microsoft のドキュメントには、関数の再配置を処理するためにジャンプ サンクを追加する可能性があることも記載されています。しかし、速度についての言葉はありません。
速度への影響について誰か考えがありますか、それともいくつかの測定を行いましたか?
c++ - NMAKE 使用時のインクリメンタル リンクの無効化
を使用してQtを構築しようとしていnmake
ます。しかし、これを試してみると、以下のリンクエラーが発生します。
LINK : 致命的なエラー LNK1123: COFF への変換中にエラーが発生しました: ファイルが無効または破損しています
私の知る限り、これは .NET フレームワークのバージョン (私は .NET 4.5 を使用しています) が原因であり、VS2010 で C++ プロジェクトをコンパイルしているときに同じリンク エラーが発生します。それを取り除くために、この投稿で提案されているように、インクリメンタル リンクを無効にします。
nmake
しかし、VS コマンド ラインから実行している場合の方法がわかりません。構成中に言及する必要がありますか、それともパラメーターとして nmake に渡すことができますか?
i386 - --incremental フラグを指定したゴールド リンカーがターゲット i386 で機能しない
binutils-2.24 のGold リンカーを使用して、ターゲットのアプリケーションをリンクしています: i686-pc-linux-gnu 。
i686-pc-linux-gnu マシンで Gold を実行したときに仮想メモリ不足エラーが発生したため、(より多くの仮想メモリを取得するために) x86_64-linux-gnu ホストでビルドし、このマシンも同様ですが、ターゲットのアプリケーションをリンクするために使用しています: i686-pc-linux-gnu.
最初のリンクは成功しました - 私はまだ実行可能ファイルを持っていません - そのため、Gold は --incremental-full に戻り、i686-pc-linux-gnu マシンで正常に実行できる動作中の実行可能ファイルを取得します。
gold-ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn.o /usr/lib32/crt1.o main.o try.o -lc --incremental
* stam32: stat: --incremental-full でリンクしているようなファイルまたはディレクトリはありません*
2 番目のリンクは、次のエラーで失敗します。
../objs-binutils-2.24/gold/ld -o stam32 -dynamic-linker /lib/ld-linux.so.2 -L/usr/lib32 /usr/lib32/crti.o /usr/lib32/crtn. o /usr/lib32/crt1.o main.o try.o -lc --incremental
../objs-binutils-2.24/gold/ld: init_got_plt_for_update の内部エラー、../../binutils-2.24/gold/target.h:949
ソースコードを調べたところ、「init_got_plt_for_update」は x86_64 と tilegx のみに実装されていることがわかりました。他のターゲットの場合、init_got_plt_for_update は単純に gold_unreachable() を呼び出し、gold をエラーで終了します。
一方、Gold のインクリメンタル リンク ( https://video.linux.com/videos/incremental-linking-with-gold ) に関する講義全体があり、Gold がサポートするターゲットとして i386 が具体的に言及されています。 i386 ターゲットでの --incremental フラグの使用に関する制限については言及していません (私が知る限り、i686-pc-linux-gnu は i386 ターゲットです)。
インクリメンタルリンクが失敗する理由を知っている人はいますか?
前もって感謝します、ガリット・ケレット
visual-studio-2010 - Visual Studio 2010 は .ilk ファイルを開くことができません
VS2010 で C++ プログラムをビルドしようとしていますが、これまでに見たことのないエラーが発生しました。
リンク: 致命的なエラー LNK1104: ファイル C:...\Debug\labfour.ilk を開けません
解決策を検索しましたが、.ilk ファイルを開くことができない Visual Studio リンカーの他のインスタンスを見つけることができませんでした。なぜこのようなことが起こるのか誰か知っていますか?cannot find or open the PDB file
ソリューション エクスプローラーのプロパティでいくつかの設定を調整する必要があるエラーのソリューションに似たソリューションがあるかどうか疑問に思っています。
どんな洞察でも大歓迎です、ありがとう。