error: cannot find -lpthread

经过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

  1. 为了可移植性:在Linux中,pthread是做为一个单独的库存在的(libpthread.so),可是在其余Unix变种中却不必定,好比在FreeBSD中是没有单独的pthread库的,所以在FreeBSD中不能使用-lpthread来连接pthread,而使用-pthread则不会存在这个问题,由于FreeBSD的编译器能正确将-pthread展开为该系统下的依赖参数。一样道理,其余不一样的变种也会有这样那样的区别,若是使用-lpthread,则可能在移植到其余Unix变种中时会出现问题,为了保持较高的可移植性,咱们最好仍是使用-pthread(尽管这种作法未被接纳成为C标准,但已基本是事实标准)。
  2. 添加额外的标志:在多数系统中,-pthread会被展开为“-D_REENTRANT -lpthread”,便是除了连接pthread库外,还先定义了宏_REENTRANT。定义这个宏的目的,是为了打开系统头文件中的各类多线程支持分支。好比,咱们经常使用的错误码标志errno,若是没有定义_REENTRANT,则实现为一个全局变量;如果定义了_REENTRANT,则会实现为每线程独有,从而避免线程竞争错误。
相关文章
相关标签/搜索