When compiling C code with g and the -pthread flag to enable multithreading, using -static to link statically against the pthread library can lead to a Segmentation fault. This occurs because the statically linked pthread library lacks the necessary weak symbols, including pthread_mutex_lock(), which are defined in the glibc library.
To resolve this issue, ensure that the executable is dynamically linked against pthread by passing the -lpthread flag to the linker. This will force the linker to include the required weak symbols from the shared library version of pthread.
Alternatively, if static linking is required, use the following command to compile the program:
g++ -o one one.cpp -Wall -std=c++11 -O3 -static -lrt -pthread \ -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
The -Wl,--whole-archive option forces the linker to include all object files from the pthread library, ensuring that the required weak symbols are included. The -Wl,--no-whole-archive option turns off this behavior for subsequent archive files.
The above is the detailed content of 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 w. For more information, please follow other related articles on the PHP Chinese website!