問題タブ [compiler-flags]
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.
gcc - Intel CompilerであるICCのGCCのfno-strict-aliasingフラグに相当するものは何ですか?
Intel コンパイラは -fno-strict-aliasing フラグを逐語的に受け入れるようですが、その動作が文書化されている場所は見たことがなく、フラグは無視される可能性があります。-no-ansi-alias などのフラグは関連しているように見えますが、正確に正しい動作を指定するようにしたいと考えています。
gcc - -march = nativeがアクティブになるフラグを確認するにはどうすればよいですか?
GCC4.3を使用してC++アプリをコンパイルしています。使用している最適化フラグを手動で選択する代わりに-march=native
、理論的には、コンパイルしているハードウェアに適用可能なすべての最適化フラグを追加する必要があります。しかし、実際に使用しているフラグを確認するにはどうすればよいですか?
ios - iOS コンパイラ定義に使用するもの
Iphone OS で実行したい次のコードがあります。IOS にはどのコンパイラ フラグを使用する必要があり、以下のコードのどこに挿入する必要がありますか? ありがとう
c++ - GCCで重要なconst/destを使用してクラスインスタンスをインスタンス化するにはどうすればよいですか?
プロファイラーを実装しています。関数に出入りするタイミングを追跡するために、コンストラクタ/デストラクタのイディオムを使用したいと思います。
私のコードの大まかな概要は次のとおりです。
ただし、実行すると、コンストラクタとデストラクタが呼び出されません。分解しても、Profile :: Profile()への参照はありません。標準では、重要なコンストラクターを持つインスタンスはコンパイラーによって最適化できないと指定されていることを理解しました。
コンパイラまたはリンカのコマンドラインに最適化フラグはありません。
属性((used))も指定してみましたが、役に立ちませんでした。
分解は次のとおりです。
実際、実行可能ファイルに生成およびリンクされたコードがあります
gcc - メモリにアラインされたコードとアラインされていないコードの混在
最近 GotoBLAS2 (MacOSX 10.6) をコンパイルして自分のコードにリンクしたところ、あらゆる種類の間違った結果が生じました。GotoBLAS からの不正な読み取りに気付いたので、すべてを valgrind で実行しました。もっと注意深く見てみると、GotoBLAS が -m128bit-long-double アライメント オプションでコンパイルされていることがわかりました。このフラグを使用してコードをコンパイルするとすぐに (長い double はまったく使用しませんが)、すべてが機能し、valgrind のあいまいさなしに正しい結果が得られます。
今私の質問です:
- 同じアライメント フラグを使用して、他のすべてのライブラリ依存関係をコンパイルする必要がありますか?
xcode - Xcode: ビルド設定 - その他のリンカー フラグ: -licucore とは?
-licucore は、プロジェクトに追加したターゲットの [その他のリンカー フラグ] に既にありました。普通は空欄じゃない?
c++ - returnステートメントが存在しないのになぜコンパイラエラーがないのですか?
Javaとは異なり、C /C++では次のことが許可されています。
これにより、クラッシュが発生し、デバッグが困難になることがよくあります。なぜ標準は非関数の最終的なリターンを強制しないのですか?void
(コンパイラは間違ったreturn
値に対してエラーを生成します)
これを強制するためのフラグがgcc/msvcにありますか?(のようなもの-Wunused-result
)
c - Cコンパイラにデバッグモードコンパイルフラグの標準はありますか?
Cコンパイラでのdebug-mode-compilationの標準仕様(ANSI / C89 / C99)による事前定義されたフラグはありますか?
私は知っDEBUG
ていてNDEBUG
フラグを立てていますが、それらがC標準に含まれているかどうかはわかりません。
optimization - コンパイル中にGCCオプション-Osが使用されないのはなぜですか?
Clangは私に警告します、
でコンパイル中make
。なぜ最適化フラグを受け入れないのですか?
c++ - 試しました:valgrind、_GLIBCXX_DEBUG、-fno-strict-aliasing; このエラーをデバッグするにはどうすればよいですか?
私は数日かけて理解しようとして本当に奇妙なエラーが発生したので、何が起こっているのかを理解するのに役立つコメントがないかどうかを確認したいと思います。
いくつかの背景。Boost1.45を使用してPython2.7.1にC++拡張機能を追加するソフトウェアプロジェクトに取り組んでいるため、すべてのコードはPythonインタープリターを介して実行されています。最近、回帰テストの1つを破ったコードに変更を加えました。この回帰テストは、おそらく数値の変動(たとえば、異なるマシン)に敏感すぎるため、修正する必要があります。ただし、この回帰は、元の回帰結果を生成したのと同じマシン/コンパイラで中断しているため、結果の違いをこの数値コードのスニペット(変更したコードとは明らかに無関係)まで追跡しました。
いくつかの数値表を作成します。ご了承ください:
- %a printsは、正確なASCII表現を提供します
- 左側(lhs)はc [3]であり、rhsは他の8つの値です。
- 以下の出力は、f、dfの境界から遠く離れたiの値に対するものです。
- このコードは、iのループ内に存在し、それ自体が複数のレイヤーをネストしています(したがって、これを再現するための分離されたケースを提供することはできません)。
そこで、ソースツリーのクローンを作成しました。コンパイルする2つの実行可能ファイルの唯一の違いは、このテストでは実行されない余分なコードがクローンに含まれていることです。唯一の違いはコードがメモリ内に存在する場所にあるはずなので、これはメモリの問題であるに違いないと思います...とにかく、2つの実行可能ファイルを実行すると、生成されるものの違いは次のとおりです。
c [3]の値は微妙に異なりますが、rhsの値はどれも違いがないことがわかります。つまり、どのように同一の入力が異なる出力を生み出しているのか。rhs式を単純化してみましたが、変更を加えると違いがなくなります。&c [3]を印刷すると、違いはなくなります。アクセスできる2つの異なるマシン(linux、osx)で実行している場合、違いはありません。これが私がすでに試したことです:
- valgrind(Pythonで多数の問題が報告されましたが、私のコードには何も報告されておらず、深刻に見えるものもありません)
- -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_ASSERT -D_GLIBCXX_DEBUG_PEDASSERT -D_GLIBCXX_DEBUG_VERIFY(ただし何もアサートされません)
- -fno-strict-aliasing(ただし、ブーストコードからエイリアシングコンパイル警告が表示されます)
問題のあるマシンでgcc4.1.2からgcc4.5.2に切り替えてみましたが、この特定の孤立した違いはなくなりました(ただし、リグレッションは失敗するため、別の問題であると想定します)。
問題をさらに切り分けるために私にできることはありますか?将来の参考のために、この種の問題をより迅速に分析または理解する方法はありますか?たとえば、rhsが変更されていないのにlhsが変更されているという私の説明を考えると、あなたは何を結論付けますか?
編集:問題は完全に原因でした-ffast-math
。