使用std::thread线程相关函数,-static静态编译的程序运行时的一些常见错误
生活随笔
收集整理的這篇文章主要介紹了
使用std::thread线程相关函数,-static静态编译的程序运行时的一些常见错误
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用std::thread的應用程序,編譯時如果是動態鏈接pthread線程庫運行正常,-static靜態鏈接時在某些平臺下可能會遇到一些意外錯誤。如常見編譯命令:g++ -std=C++11 test.c -o test -pthread
1、Segmentation fault(段錯誤)
2、terminate called after throwing an instance of 'std::system_error'......
第一點,檢查編譯選項是否鏈接線程庫,檢查鏈接選項是 “-pthread” 還是 “-lpthread”?
第二點,在編譯選項上添加如下選項:
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive作用:強制鏈接引用的靜態庫中所有符號!!編譯不報錯的原因,是默認編譯選項只鏈接到靜態庫中第一次出現的該引用對象,而該對象可能是“weak symbol”,因此導致問題發生。采用 whole-archive 可以把每一個引用對象包含進來,不會使用前面提到的不完整實現“weak symbol”。
完整編譯選項示例:
g++ -std=C++11 -Wl,--whole-archive -pthread -Wl,--no-whole-archive?test.c -o test?
總結
以上是生活随笔為你收集整理的使用std::thread线程相关函数,-static静态编译的程序运行时的一些常见错误的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序,用户拒绝授权后重新授权;un
- 下一篇: Self Introduction