g を使用してマルチスレッド コードをコンパイルする
必要なフラグ (-pthread -std=c 11) があるにもかかわらず、コードはコンパイルに失敗します。 g を実行すると、次のエラーが発生します:「std::thread を使用するためにマルチスレッドを有効にします: 操作は許可されていません。」
問題の解決
根本的な問題はバグに起因しますgccで。この問題を回避するには、次の回避策を適用できます。
<code class="bash">g++ main.cpp -o main.out -pthread -std=c++11 -Wl,--no-as-needed</code>
回避策を理解する
-Wl,--no-as-needed フラグは、リンカーを使用して、スレッド ライブラリの動的ロードを省略します。デフォルトでは、リンカにはコンパイルされたプログラムの一部としてスレッド ライブラリが含まれていますが、このプロセスは特定の条件下で失敗する可能性があります。
代替コンパイラ:clang
代替としてg コマンド ラインを変更するには、clang などの別の C コンパイラを使用することもできます。次のコマンドはコードを正常にコンパイルします。
<code class="bash">clang++ main.cpp -o main.out -std=c++11</code>
結論
-Wl,--no-as-needed 回避策を使用するか、代替手段を選択することにより、 Clang のようなコンパイラを使用すると、 g で発生するマルチスレッド コンパイルの問題を克服できます。
以上がマルチスレッド C コードが g でコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。