日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

gcc中-pthread和-lpthread的区别

發布時間:2023/11/27 生活经验 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc中-pthread和-lpthread的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用gcc編譯使用了POSIX thread的程序時通常需要加額外的選項,以便使用thread-safe的庫及頭文件,一些老的書里說直接增加鏈接選項 -lpthread 就可以了,像這樣:

Shell代碼 ?
  1. gcc?-c?x.c??
  2. gcc?x.o?-ox?-lpthread??

?而gcc手冊里則指出應該在編譯和鏈接時都增加 -pthread 選項,像這樣:

Shell代碼 ?
  1. gcc?-pthread?-c?x.c??
  2. gcc?x.o?-ox?-pthread??

?那么 -pthread 相比于 -lpthread 鏈接選項究竟多做了什么工作呢?我們可以在verbose模式下執行一下對應的gcc命令行看出來。下面是老式的直接加 -lpthread 鏈接選項的輸出結果:

Shell代碼 ?
  1. $?gcc?-v?-c?x.c??
  2. ...??
  3. /usr/lib/gcc/i486-linux-gnu/4.2.4/cc1?-quiet?-v?x.c?-quiet?-dumpbase?x.c??
  4. -mtune=generic?-auxbase?x?-version?-fstack-protector?-fstack-protector?-o?/tmp/cch4ASTF.s??
  5. ...??
  6. as?--traditional-format?-V?-Qy?-o?x.o?/tmp/cch4ASTF.s??
  7. ...??
  8. $?gcc?-v?x.o?-ox?-lpthread??
  9. ...??
  10. ?/usr/lib/gcc/i486-linux-gnu/4.2.4/collect2?--eh-frame-hdr?-m?elf_i386?--hash-style=both??
  11. -dynamic-linker?/lib/ld-linux.so.2?-ox??
  12. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o??
  13. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crti.o??
  14. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtbegin.o??
  15. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib/../lib??
  16. -L/usr/lib/gcc/i486-linux-gnu/4.2.4??
  17. -L/usr/lib/gcc/i486-linux-gnu/4.2.4??
  18. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib??
  19. -L/lib/../lib??
  20. -L/usr/lib/../lib??
  21. -L/opt/intel/Compiler/11.1/046/lib/ia32??
  22. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib??
  23. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../..??
  24. x.o?-lpthread?-lgcc?--as-needed?-lgcc_s?--no-as-needed?-lc?-lgcc??
  25. --as-needed?-lgcc_s?--no-as-needed??
  26. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtend.o?/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crtn.o??

?下面是在編譯和鏈接時分別指定 -pthread 選項的輸出結果:

Shell代碼 ?
  1. $?gcc?-v?-pthread?-c?x.c??
  2. ...??
  3. /usr/lib/gcc/i486-linux-gnu/4.2.4/cc1?-quiet?-v?<strong>-D_REENTRANT</strong>??
  4. ?x.c?-quiet?-dumpbase?x.c??
  5. -mtune=generic?-auxbase?x?-version?-fstack-protector?-fstack-protector?-o?/tmp/cc205IQf.s??
  6. ...??
  7. as?--traditional-format?-V?-Qy?-o?x.o?/tmp/cc205IQf.s??
  8. ...??
  9. $?gcc?-v?x.o?-ox?-pthread??
  10. /usr/lib/gcc/i486-linux-gnu/4.2.4/collect2?--eh-frame-hdr?-m?elf_i386?--hash-style=both??
  11. -dynamic-linker?/lib/ld-linux.so.2?-ox??
  12. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crt1.o??
  13. /usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crti.o??
  14. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtbegin.o??
  15. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib/../lib??
  16. -L/usr/lib/gcc/i486-linux-gnu/4.2.4??
  17. -L/usr/lib/gcc/i486-linux-gnu/4.2.4??
  18. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib??
  19. -L/lib/../lib??
  20. -L/usr/lib/../lib??
  21. -L/opt/intel/Compiler/11.1/046/lib/ia32??
  22. -L/opt/intel/Compiler/11.1/046/tbb/ia32/cc4.1.0_libc2.4_kernel2.6.16.21/lib??
  23. -L/usr/lib/gcc/i486-linux-gnu/4.2.4/../../..??
  24. x.o?-lgcc?--as-needed?-lgcc_s?--no-as-needed?<strong>-lpthread</strong>??
  25. ?-lc?-lgcc??
  26. --as-needed?-lgcc_s?--no-as-needed??
  27. /usr/lib/gcc/i486-linux-gnu/4.2.4/crtend.o?/usr/lib/gcc/i486-linux-gnu/4.2.4/../../../../lib/crtn.o??

?可見編譯選項中指定 -pthread 會附加一個宏定義 -D_REENTRANT,該宏會導致 libc 頭文件選擇那些thread-safe的實現;鏈接選項中指定 -pthread 則同 -lpthread 一樣,只表示鏈接 POSIX thread 庫。由于 libc 用于適應 thread-safe 的宏定義可能變化,因此在編譯和鏈接時都使用 -pthread 選項而不是傳統的 -lpthread 能夠保持向后兼容,并提高命令行的一致性。


總結

以上是生活随笔為你收集整理的gcc中-pthread和-lpthread的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。