經過arm-linux-androideabi-gcc 出現「cannot find -lpthread」錯誤,linux
解決方案:android
將 -lpthread替換爲-pthread多線程
附:-pthread 與 -lpthread區別ide
通常狀況下,咱們在連接一個(文件名爲libxxx.so或libxxx.a等的)庫時,會使用-lxxx的方式;在Linux中要用到多線程時,須要連接pthread庫,按照慣例,咱們應該使用-lpthread的方式來進行連接;可是,經過平常的觀察,我發現不少開源代碼都是使用了-pthread參數,而非使用-lpthread,這是爲何呢?idea
一通Google後,總算找到一些線索:spa
- 爲了可移植性:在Linux中,pthread是做爲一個單獨的庫存在的(libpthread.so),可是在其餘Unix變種中卻不必定,好比在FreeBSD中是沒有單獨的pthread庫的,所以在FreeBSD中不能使用-lpthread來連接pthread,而使用-pthread則不會存在這個問題,由於FreeBSD的編譯器能正確將-pthread展開爲該系統下的依賴參數。一樣道理,其餘不一樣的變種也會有這樣那樣的區別,若是使用-lpthread,則可能在移植到其餘Unix變種中時會出現問題,爲了保持較高的可移植性,咱們最好仍是使用-pthread(儘管這種作法未被接納成爲C標準,但已基本是事實標準)。
- 添加額外的標誌:在多數系統中,-pthread會被展開爲「-D_REENTRANT -lpthread」,便是除了連接pthread庫外,還先定義了宏_REENTRANT。定義這個宏的目的,是爲了打開系統頭文件中的各類多線程支持分支。好比,咱們經常使用的錯誤碼標誌errno,若是沒有定義_REENTRANT,則實現爲一個全局變量;如果定義了_REENTRANT,則會實現爲每線程獨有,從而避免線程競爭錯誤。