编译多线程程序时使用的gcc -pthread
和gcc -lpthread
有什么区别?
最佳答案
-pthread
告诉编译器在pthread库中链接以及为线程配置编译。
例如,以下内容显示了在我的Ubuntu计算机上安装的GCC软件包上使用-pthread
选项时定义的宏:
$ 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
使用
-lpthread
选项只会导致pthread库被链接- undefined 预定义的宏。底线:您应该使用
-pthread
选项。注意:
-pthread
选项在GCC文档中被记录为特定于平台的选项,因此可能并不总是可用。但是,它在GCC文档未明确列出它的平台上可用(例如i386和x86-64)-您应该在可用时使用它。还要注意,GCC还使用了其他类似选项,例如
-pthreads
(在Solaris 2上作为-pthread
的同义词列出)和-mthread
(对于i386和x86-64 Windows上的MinGW特定的线程支持)。我的理解是,GCC正在尝试统一使用ojit_code。
关于multithreading - 编译时-pthread和-lpthread之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60677077/