gcc编译线程程序,为啥要加-lpthread,头文件已经包含了<pthread.h>了啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gcc编译线程程序,为啥要加-lpthread,头文件已经包含了<pthread.h>了啊相关的知识,希望对你有一定的参考价值。

-lpthread是链接库,

<pthread.h>只有申明,实现部分都在库里面。

创建线程时一般是把函数的指针做参数,所以要加一个取地址符号。

ret=pthread_create(&id,NULL,(void *)&thread,NULL);

另外,建议要检查一下创建线程的返回值ret是否成功,防止影响后面的代码。

扩展资料:

每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。

编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。

参考资料来源:百度百科-gcc

参考技术A 编译程序包括 预编译, 编译,汇编,链接

包含头文件了,仅能说明有了线程函数的声明, 但是还没有实现, 加上-lpthread是在链接阶段,链接这个库追问

谢谢。那其它的呢?很多比如 。还有很多,都不要加,难道就比较特别???

追答

其他的可能包含在默认链接的库中,如libc, 其他不清楚,很少写linux代码,忘的差不多了

本回答被提问者采纳
参考技术B 大部分函数包含头文件编译时不用链接库是因为你调用的函数就写在头文件中,打开头文件可以看到函数原码;而需要链接库是因为你调用的函数没有写在头文件中,函数是被封装起来的看不了原函数是怎样写的,必须链接库

gcc编译出现 undefined reference to ‘pthread_create‘ 的解决方法

错误

今天写了个Linux多线程 报了下面的错
在这里插入图片描述

原因

由于pthread库不是标准linux库, gcc编译时候找不到

解决

编译语句后加上-lpthread ,添加这个线程库

gcc thread.c -lpthread 

在编译就没错啦
在这里插入图片描述

以上是关于gcc编译线程程序,为啥要加-lpthread,头文件已经包含了<pthread.h>了啊的主要内容,如果未能解决你的问题,请参考以下文章

gcc/clang编译带pthread.h头文件的源码时需要的参数

gcc -lpthread

急!LINUX下,GCC编译,原程序包含<semaphore.h>头文件,为啥编译时说sem_wait,sem_post等未定义的引用

编译时 -pthread 和 -lpthread 之间的区别

如何使用GDB调试多线程

pthread.h 的 undefined reference to `pthread_create'