問題タブ [static-order-fiasco]
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.
gnu-make - ランダマイズ ターゲットの目標を立てる
C++ ライブラリがあり、いくつかの C++ 静的オブジェクトがあります。ライブラリは、C++ の静的初期化の大失敗に悩まされる可能性があります。*.o
ビルド中にファイルの順序をランダム化することで、予期しない翻訳単位の依存関係を精査しようとしています。
GNU マニュアルの2.3 How make Processes a Makefileにアクセスしたところ、次のように表示されました。
目標は、最終的に更新しようとする目標です。コマンドラインを使用してこの動作をオーバーライドできます (目標を指定する引数を参照) ...
9.2 目標を指定するための引数にも従いましたが、治療は提供されませんでした。それは私を驚かせませんでした。
Makeの目標をランダム化することは可能ですか? もしそうなら、どうすればいいですか?
そうでない場合、代替手段はありますか?これはテスト環境にあるため、GNUmake だけでなく、より多くのツールを利用できます。
前もって感謝します。
c++ - 静的順序初期化の失敗、iostream および C++11
C++11 仕様によると:
<iostream>
翻訳単位に含めた結果は、静的な保存期間<iostream>
を持つ のインスタンスが定義されているかのようになります。同様に、プログラム全体は、静的な保存期間ios_base::Init
を持つ のインスタンスが少なくとも 1 つあるかのように動作します。ios_base::Init
これは、私のコードが次のようになっている場合を意味します。
と
そうすればcerr
、静的な初期化の大失敗のリスクなしに安全に呼び出すことができます。
残念ながら、そのコードはセグメンテーション違反を起こします...なぜですか? gcc 6.2.1 が C++11 仕様を無視することを決定したとは思わず<iostream>
、A.cpp に含めました。仕様上はこれで十分でしょう。