マルチスレッドを有効にするために g と -pthread フラグを指定して C コードをコンパイルする場合、-static を使用して pthread ライブラリに対して静的にリンクすると、セグメンテーション フォールトが発生する可能性があります。これは、静的にリンクされた pthread ライブラリに、glibc ライブラリで定義されている pthread_mutex_lock() などの必要な弱いシンボルが不足しているために発生します。
この問題を解決するには、実行可能ファイルが pthread に対して動的にリンクされていることを確認します。 -lpthread フラグをリンカーに設定します。これにより、リンカーは pthread の共有ライブラリ バージョンから必要な弱いシンボルを強制的に含めるようになります。
あるいは、静的リンクが必要な場合は、次のコマンドを使用してプログラムをコンパイルします。
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
-Wl,--whole-archive オプションは、リンカーに pthread ライブラリのすべてのオブジェクト ファイルを強制的に含めさせ、必要な弱いシンボルが確実に含まれるようにします。 -Wl,--no-whole-archive オプションは、後続のアーカイブ ファイルに対してこの動作をオフにします。
以上が記事の内容に適した質問ベースのタイトルをいくつか示します。 * C コンパイルで -static を -pthread とともに使用すると、セグメンテーション違反が発生するのはなぜですか? * セグメンテーション違反を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。