ホームページ  >  記事  >  バックエンド開発  >  記事の内容に適した質問ベースのタイトルをいくつか示します。 * C コンパイルで -static を -pthread とともに使用すると、セグメンテーション違反が発生するのはなぜですか? * セグメンテーション違反を解決する方法

記事の内容に適した質問ベースのタイトルをいくつか示します。 * C コンパイルで -static を -pthread とともに使用すると、セグメンテーション違反が発生するのはなぜですか? * セグメンテーション違反を解決する方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 21:25:02965ブラウズ

Here are a few question-based titles that fit the content of your article:

* Why does using -static with -pthread for C   compilation cause Segmentation Faults?
* How to resolve Segmentation Faults when statically linking pthread in C  ?
* Static vs. Dyn

マルチスレッドを有効にするために 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 サイトの他の関連記事を参照してください。

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