ホームページ >バックエンド開発 >C++ >マルチスレッド C コードが g でコンパイルに失敗するのはなぜですか?

マルチスレッド C コードが g でコンパイルに失敗するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 06:01:30512ブラウズ

Why Does My Multithreaded C   Code Fail to Compile with g  ?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。