編譯程序包括 預編譯, 編譯,匯編,鏈接,包含頭文件了,僅能說明有了線程函數的聲明, 但是還沒有實現, 加上-lpthread是在鏈接階段,鏈接這個庫。
<stdio.h>等都是靜態庫,不需要做額外的表示,連接時會直接鏈接進代碼里。pthread是動態庫,需要用-lpthread,所有的動態庫都需要用-lxxx來引用
用gcc編譯使用了POSIX thread的程序時通常需要加額外的選項,以便使用thread-safe的庫及頭文件,一些老的書里說直接增加鏈接選項 -lpthread 就可以了
而gcc手冊里則指出應該在編譯和鏈接時都增加 -pthread 選項
編譯選項中指定 -pthread 會附加一個宏定義 -D_REENTRANT,該宏會導致 libc 頭文件選擇那些thread-safe的實現;鏈接選項中指定 -pthread 則同 -lpthread 一樣,只表示鏈接 POSIX thread 庫。由於 libc 用於適應 thread-safe 的宏定義可能變化,因此在編譯和鏈接時都使用 -pthread 選項而不是傳統的 -lpthread 能夠保持向后兼容,並提高命令行的一致性。
目前gcc 4.5.2中已經沒有了關於 -lpthread的介紹了。所以以后的多線程編譯應該用-pthread,而不是-lpthread。
參考地址:http://blog.csdn.net/skylinethj/article/details/38569243