2011-04-27 65 views
0

当我编译cc filename.c时,我编写了一个小线程程序,在编译期间我得到了一些语句,但是当我使用-lpthread(cc filename.c -lpthread)编译时,它被执行了什么? -lpthread为什么需要它?任何人都可以详细解释这一点。这将有很大的帮助。编译一个线程程序

+1

为我们详细讲解,您需要提供详细信息 - 如源代码和输出。在这种情况下,我们可以没有办法,但是如果你没有告诉我们任何有用的东西,我们通常不能提供帮助。 – delnan 2011-04-27 11:50:51

回答

3

您在程序中使用的pthread_create()函数不是基本的C函数,并且需要使用库。

这就是为什么你必须使用这个命令开关-lpthread。 这个gcc命令告诉他在磁盘上的某个地方寻找一个名为libpthread的库,并使用它来提供线程创建机制。

我建议你阅读这熟悉的“库”的概念:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

0

pthread是一种叫做POSIX线程的东西。它是Unix类似POSIX环境中的线程的标准库。

既然您要使用pthread,您需要告诉编译器链接到该库。

您可以了解更多关于什么是lpthread以及它是如何工作的:https://computing.llnl.gov/tutorials/pthreads/

+1

实际上没有任何“lpthread”。 'libpthread'将是被链接的物理库的名称; '-lpthread'是'-l pthread'的缩写,当查找实现它的实际文件时,链接自动将'lib'放在每个库的前面。 – 2011-04-27 12:13:08

+0

编辑我的答案,谢谢 – rzetterberg 2011-04-27 12:17:39

0

-l选项通常用于指定库(在这种情况下,并行线程库),应与你的程序链接。

由于线程函数通常位于单独的库中,因此在构建使用它们的程序时需要使用类似这样的选项,否则将会出现链接器错误。