在不同平台下使用多线程的程序编译时的编译选项设置如下图所示。
gcc下编译时我们会碰到两个选项-pthread和-lpthread,记住推荐使用-pthread而不是-lpthread,原因如下
- -lpthread只是起到链接pthread库的作用;而-pthread选项除了会链接pthread库,还会增加一些影响编译的宏的定义,使得一些老版本基础库中的接口是线程安全的。因此使用-pthread会更加安全
- Linux中pthread作为一个单独的库存在(libpthread.so),而在其他Unix系统中却不一定,在这些系统中使用-lpthread是无法实现链接到对应的pthread库的作用的;而使用-pthread却没有问题,因为编译器会正确的将-pthread展开为该系统下对应的编译参数。因此使用-pthread具有更好的可移植性。
有关它们的具体区别可以参考这篇博客