2014-04-23 18 views
73

Sự khác nhau giữa gcc -pthreadgcc -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

+2

Rất tiếc, có. Đây là bản sao chính xác: http://stackoverflow.com/q/2127797/694576 – alk

+0

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

Trả lời

87

-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.

+2

Đ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

+0

@FUZxxl Chuyển '-lpthread' * làm * nhận toàn bộ thư viện luồng POSIX. – immibis

+3

@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

4

-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ý.

Các vấn đề liên quan