使用 g 和 -pthread 标志编译 C 代码以启用多线程时,使用 -static 静态链接 pthread 库可能会导致分段错误。发生这种情况的原因是静态链接的 pthread 库缺少必要的弱符号,包括 glibc 库中定义的 pthread_mutex_lock()。
要解决此问题,请通过传递链接器的 -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中文网其他相关文章!