Sự khác nhau giữa gcc -pthread
và gcc -lpthread
được sử dụng trong khi biên dịch chương trình đa luồng là gì?Sự khác nhau giữa -pthread và -lpthread khi biên dịch
Trả lời
-pthread
yêu cầu trình biên dịch liên kết trong thư viện pthread cũng như định cấu hình biên dịch cho chuỗi.
Ví dụ, sau đây cho thấy các macro mà có được định nghĩa khi tùy chọn -pthread
được sử dụng trên bao bì GCC được cài đặt trên máy tính Ubuntu của tôi:
$ gcc -pthread -E -dM test.c > dm.pthread.txt
$ gcc -E -dM test.c > dm.nopthread.txt
$ diff dm.pthread.txt dm.nopthread.txt
152d151
< #define _REENTRANT 1
208d206
< #define __USE_REENTRANT 1
Sử dụng tùy chọn -lpthread
chỉ gây ra các thư viện pthread được liên kết - các macro được xác định trước không được xác định.
Dòng dưới cùng: bạn nên sử dụng tùy chọn -pthread
.
Lưu ý: tùy chọn -pthread
được ghi nhận là tùy chọn nền tảng cụ thể trong tài liệu GCC, vì vậy nó không phải lúc nào cũng khả dụng. Tuy nhiên, nó có sẵn trên các nền tảng mà các tài liệu GCC không liệt kê rõ ràng nó (chẳng hạn như i386 và x86-64) - bạn nên sử dụng nó khi có sẵn.
Cũng lưu ý rằng tùy chọn tương tự khác đã được sử dụng bởi GCC, chẳng hạn như -pthreads
(liệt kê như là một từ đồng nghĩa với -pthread
trên Solaris 2) và -mthread
(đối với hỗ trợ thread MinGW cụ thể trên i386 và x86-64 Windows). Sự hiểu biết của tôi là GCC đang cố gắng chuyển sang sử dụng -pthread
thống nhất trong tương lai.
Điều lạ lùng vì nó mâu thuẫn trực tiếp với POSIX. POSIX yêu cầu rằng việc truyền '-lpthread' là đủ để nhận toàn bộ thư viện luồng POSIX. – fuz
@FUZxxl Chuyển '-lpthread' * làm * nhận toàn bộ thư viện luồng POSIX. – immibis
@immibis Không, ý tôi là, POSIX nói rằng việc liên kết với '-lpthread' là đủ để nhận được hỗ trợ đầy đủ pthread. Không cần có cờ biên dịch khác. – fuz
-pthread
Thêm hỗ trợ đa luồng với thư viện pthreads. Tùy chọn này đặt cờ cho cả bộ tiền xử lý và trình liên kết (man gcc
).
khi
-lpthread
đến tồn tại trong khi liên kết sẽ không có ảnh hưởng trong khi tiền xử lý.
- 1. Khi biên dịch mã x64, sự khác nhau giữa "x86_amd64" và "amd64" là gì?
- 2. Tại sao khai báo ngầm của pthread_yield với -lpthread trong khi tất cả ok với -pthread?
- 3. Sự khác biệt chính giữa Trình biên dịch và Transpiler
- 4. Sự khác nhau giữa IIFE và gọi
- 5. Sự khác nhau giữa Scala REPL và Clojure REPL - biên dịch tốc độ
- 6. Sự khác nhau giữa các biến cuối cùng và hằng số thời gian biên dịch
- 7. Sự khác nhau giữa "thời gian biên dịch" và "thời gian chạy" là gì?
- 8. Sự khác nhau giữa biên dịch(), phân tích cú pháp(), và render() trong mustache.js
- 9. Sự khác nhau giữa C++ và quá trình biên dịch Java
- 10. Sự khác nhau giữa các trình biên dịch Borland, GCC và MinGW là gì?
- 11. Sự khác nhau giữa các trình biên dịch arm-gbieabi và gnueabi-hf
- 12. Sự khác biệt giữa Trình biên dịch Chỉ trong thời gian và Phiên dịch là gì?
- 13. tùy chọn -lpthread của gcc
- 14. Sự khác nhau giữa onResume() và onResumeFragments()
- 15. Sự khác nhau giữa CC, gcc và g ++?
- 16. Biên dịch trong Eclipse với tập tin -pthread và -lrt của gcc
- 17. Sự khác nhau giữa okhttp và httpurlconnection?
- 18. Sự khác nhau giữa Tkinter và Tkinter
- 19. Sự khác nhau giữa Response.End() và Response.Flush()
- 20. Sự khác nhau giữa sys và os.sys
- 21. Sự khác nhau giữa string.ToLower và TextInfo.ToLower
- 22. Sự khác nhau giữa initWithNibName và initWithCoder
- 23. Sự khác nhau giữa ContextLoaderListener và ContextLoaderServlet
- 24. Sự khác nhau giữa QPushButton và QToolButton
- 25. Sự khác nhau giữa sqlplus và sqldeveloper?
- 26. Sự khác nhau giữa FacesContext và ExternalContext
- 27. Sự khác nhau giữa restartLoader và onContentChanged
- 28. Sự khác nhau giữa ngStorage và $ window.localStorage
- 29. Sự khác nhau giữa @FormDataParam và @FormParam
- 30. Sự khác nhau giữa ViewFlipper và ViewSwitcher
Rất tiếc, có. Đây là bản sao chính xác: http://stackoverflow.com/q/2127797/694576 – alk
Bản sao có thể có của [Ý nghĩa của cờ -pthread khi biên dịch] (https://stackoverflow.com/questions/2127797/gcc-significance-of -pthread-flag-when-compiling) – jww