問題タブ [precompiled-headers]
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++ - 静的ライブラリプロジェクトでのプリコンパイル済みヘッダーの使用
プロジェクトの設定方法についてアドバイスが必要です。静的ライブラリを構築していますが、行き過ぎる前に、プリコンパイル済みヘッダーの使用方法が正しいかどうかを知りたいと思っています。
これまでのところ、私のstdafxファイルには(DWORDなどのタイプの場合)と(std :: stringの場合)が含まれています。
TestFuncs.cpp/hという単純なcpp/ヘッダーコンボを作成しました
TestFuncs.cpp:
TestFuncs.h
ここでのこのコードは正しくコンパイルされます。私が抱えている問題は、この静的ライブラリを別のプロジェクトで使用したい場合、通常は#include "path_to_my_static_lib_project/TestFuncs.h"を実行することです。
ただし、これに関する問題はTestFuncs.hに基づいており、DWORDと文字列はstdafx.hファイルから定義されたタイプであるため、その時点では不明です。
私が思いついた解決策の1つ(そうすることが正しいかどうかはわかりません)は、#pragmaの後にTestFuncs.hの先頭にstdafx.hを一度含めることです。これで、プロジェクトはプリコンパイル済みヘッダーを使用するかどうかに関係なくファイルを処理します。
これはどのように行われるべきですか、それともこれを行う適切な方法がありますか?
ありがとうございました。
c++ - 特定のヘッダーが既に stdafx.h に含まれている場合、明示的に .cpp ファイルに含める必要がありますか?
特定のヘッダーがすでに stdafx.h に含まれている場合 - .cpp ファイル (すでに stdafx.h が含まれている) にそれを明示的に含める必要がありますか?
c++ - Visual Studioはvc90.pdbを何に使用しますか?
http://msdn.microsoft.com/en-us/library/yd4f8bd1.aspxによると、プロジェクトには2つの.pdbファイルがあります。
project.pdb後でミニダンプをロードできるようにするために使用しますが、vcx0.pdbは正確には何に使用されますか?足りない場合は問題ありませんので、保管する必要はありません。
さまざまなプロジェクト間でPCHを共有しようとしていますが、問題を引き起こしているのはこのファイルだけです。PCHで作成したvcx0.pdbをすべてのプロジェクトにコピーすると、それらのプロジェクトはこのファイルをベースとして使用し、独自のシンボルを追加します。これらのプロジェクトにこの.pdbファイルを指定しないと、失敗します。
私が気づいたいくつかのこと:
- 警告LNK4099がvcx0.pdbの欠落を報告することは、重要なことではないようです。
- / Fdを使用して複数のプロジェクトを同じファイルにポイントし、並列ビルドを無効にしてその機能を実現すると、すべてのプロジェクトが独自のシンボルで増分し続けます
c++ - GNU make を使用していくつかのプリコンパイル済みヘッダー ファイルを作成する
gcc (として実行g++
) と GNU make を使用します。gcc を使用してヘッダー ファイルをプリコンパイルしprecompiled.h
、作成しprecompiled.h.gch
ます。Makefile の次の行がそれを行います。
g++
さまざまなコマンドライン パラメーターを指定して実行する必要が生じるまでは、すべて問題ありませんでした。この場合、precompiled.h.gch
存在していても使用できず、コンパイルは非常に遅くなります。この状況を処理するために読んだ gcc のドキュメントでは、ディレクトリを作成し、そこにプリコンパイル済みヘッダー ファイルを配置する必要があります。コマンド ライン パラメーターprecompiled.h.gch
のセットごとに 1 つのファイルです。g++
だから今、g++
この方法でgchファイルを作成するようにMakefileを変更する方法を考えています。g++
ディレクトリ内の既存のファイルを使用できるかどうかをテストするためだけに実行しprecompiled.h.gch
、そうでない場合は、一意のファイル名で新しいプリコンパイル済みヘッダーを生成できます。
gcc はそのようなテストをサポートしていますか?
多分私は別の方法で私が欲しいものを実装できますか?
xcode - XcodeプロジェクトからPrefix.pchファイルを削除しても大丈夫ですか?
Xcodeプロジェクトは、Prefix.pchファイルを自動的に生成します。このファイルを削除してビルドしようとすると、「* _Prefix.pch」ファイルが見つからないというビルドエラーが発生しました。
- Prefix.pchファイルはXcodeでコンパイルするために必須ですか?
- Prefix.pchファイルなしでビルドするにはどうすればよいですか?
c++ - Visual Studio のプリコンパイル済みヘッダーには何が含まれていますか?
問題は、Visual Studio コンパイラによって作成された .pch バイナリの内容に関するものです。何が含まれていますか?ヘッダー ファイルの解析済みツリーのみですか、それともオブジェクト コードですか?
次の例を検討してください。
プリコンパイルされるセットにこのヘッダーを含めると、コンパイルされて .pch に追加される vector<int> の完全なテンプレート インスタンス化が発生しますか?
もう少し文脈を与えるために; 解析ツリーのみがプリコンパイルされている場合、これは、インスタンス化されたテンプレートのオブジェクト コードがコンパイル ユニットごとに 1 回作成され、結果としてコンパイルおよびリンク時間が増加することを意味します。したがって、「ユニティ ビルド」/コンパイル ユニットの削減は、プリコンパイル済みヘッダーが有効になっている場合でも、ビルド時間を短縮する上で重要な要素となります。
c++ - プリコンパイル済みヘッダー: すべきこととすべきでないこと
コンパイルを高速化するためにプリコンパイル済みヘッダーが使用されていることは知っていますが、ヘッダーに含めるべきファイルについて、すべきこととすべきでないことはありますか? たとえば、多くのブースト ライブラリを使用するプロジェクトがあるので、ブースト ヘッダー ファイルをインクルードするだけstdafx.h
です (私は VS2008 を使用しています)。すべての標準ヘッダー ファイルも含める必要がありますか? たとえば、 を含め<vector>
ても使用しない場合でも、これにより実行可能ファイルのサイズが大きくなりますstd::vector
か? 自分のプロジェクトのヘッダー ファイルを stdafx.h に含めるのは悪い考えですか?
precompiled-headers - プリコンパイル済みヘッダー
プリコンパイル済みヘッダーとは正確には何ですか?それらはいつ使用されますか?
c++ - Boostライブラリを使用する場合のコンパイル/リンク時間を短縮します
Boost Program Optionsを使用していますが、非常に小さなC ++コードをコンパイルするのにかなりの時間がかかります(10秒以上)。Boostライブラリなしでコードをコンパイルするのに1秒かかりました。
Boostライブラリを使用してコンパイル/リンク時間を増やす方法はありますか?クロスプラットフォームなので、Mac OS X / Linux/PCでコードをコンパイルする必要があります。
c++ - プリコンパイル済みヘッダーと ASLR の何が問題になっていますか?
いくつかのサイトで、プリコンパイル済みヘッダーとアドレス空間レイアウトのランダム化に互換性がないことを読みました。それらに互換性がない理由は何ですか? それを修正するには何が必要ですか?
私の質問は、OS に依存しないことです。これは、grsecurity を使用する Linux および新しい Windows バージョンの問題であると聞きました。(そして、他に ASLR があるかどうかはわかりません。)