当我编译cc filename.c时,我编写了一个小线程程序,在编译期间我得到了一些语句,但是当我使用-lpthread(cc filename.c -lpthread)编译时,它被执行了什么? -lpthread为什么需要它?任何人都可以详细解释这一点。这将有很大的帮助。编译一个线程程序
编译一个线程程序
回答
您在程序中使用的pthread_create()
函数不是基本的C函数,并且需要使用库。
这就是为什么你必须使用这个命令开关-lpthread
。 这个gcc命令告诉他在磁盘上的某个地方寻找一个名为libpthread
的库,并使用它来提供线程创建机制。
我建议你阅读这熟悉的“库”的概念:http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html
pthread是一种叫做POSIX线程的东西。它是Unix类似POSIX环境中的线程的标准库。
既然您要使用pthread,您需要告诉编译器链接到该库。
您可以了解更多关于什么是lpthread以及它是如何工作的:https://computing.llnl.gov/tutorials/pthreads/
实际上没有任何“lpthread”。 'libpthread'将是被链接的物理库的名称; '-lpthread'是'-l pthread'的缩写,当查找实现它的实际文件时,链接自动将'lib'放在每个库的前面。 – 2011-04-27 12:13:08
编辑我的答案,谢谢 – rzetterberg 2011-04-27 12:17:39
-l选项通常用于指定库(在这种情况下,并行线程库),应与你的程序链接。
由于线程函数通常位于单独的库中,因此在构建使用它们的程序时需要使用类似这样的选项,否则将会出现链接器错误。
- 1. 错误编译线程程序
- 2. 如何编译线程程序?
- 3. 用g ++编译一个Windows C++程序
- 4. 编译和运行一个Qt程序
- 5. 编译一个AST到程序集
- 6. 使用gcc在另一个程序中编译程序
- 7. 使用另一个java程序编译java程序
- 8. 编译并执行一个jar程序包的java程序
- 9. boost ::线程编译错误
- 10. C++程序编译
- 11. 编译C++程序
- 12. 编译vmci程序
- 13. 编译boost程序
- 14. 编译trilinos程序
- 15. 汇编:编译COM程序
- 16. 编程一个简单的编译器
- 17. 编译Fortran程序和编译器/库
- 18. 制作一个C程序来编译另一个
- 19. 使用线程在程序中编译错误
- 20. 编译没有多线程DLL的程序(Visual C++ 2010)
- 21. 一个线程在iPhone应用程序中杀死另一个线程(两个线程都是主线程)?
- 22. 无法在一个程序中编译两个文件的程序
- 23. 编写一个多线程C#应用程序
- 24. 用C和程序集编写一个简单的线程
- 25. 对一个基本的多线程程序进行编码
- 26. 如何让这个C程序编译?
- 27. 为什么这个C++程序编译?
- 28. Makefile可以编译多个C程序?
- 29. 守护程序线程不止一个?
- 30. 定时一个Fortran多线程程序
为我们详细讲解,您需要提供详细信息 - 如源代码和输出。在这种情况下,我们可以没有办法,但是如果你没有告诉我们任何有用的东西,我们通常不能提供帮助。 – delnan 2011-04-27 11:50:51