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

Posted

tags:

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

参考技术A

-lpthread是链接库,

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

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

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

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

扩展资料:

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

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

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

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

RT

编译时加上参数:-lpthread

要看报错的阶段,是在编译还是链接阶段.
如果编译时函数没有找到,那是头文件的问题,如果链接时未定义引用,那是c库的问题.
如果你的头文件都正常包含了,那可能你的c库没有使能semaphore的支持.追问

怎么加参数??在哪加?gcc -o prohy producer.c 我原来这么写的。。

追答


在最后加

追问

加了还是那样。。这是什么原因?GCC版本不行??我用的ubuntu,然后直接用命令下载的gcc

追答

gcc -pthread -c x.c
gcc x.o -ox -pthread

参考技术A 要看报错的阶段,是在编译还是链接阶段.
如果编译时函数没有找到,那是头文件的问题,如果链接时未定义引用,那是c库的问题.

如果你的头文件都正常包含了,那可能你的c库没有使能semaphore的支持.追问

我才接触LINUX,不是很清楚,就是在文本编辑器里写好了程序,然后在UBUNTU的终端输入gcc编译命令后,出现的提示

追答

把错误贴出来瞄瞄

参考技术B 楼上说的对啊,如果是在编译阶段,可能是头文件路径不对。把你gcc编译语句和报错信息贴出来吧,这样大家好帮你~ 参考技术C gcc -o prohy -lpthread producer.c追问

加了还是那样。。这是什么原因?GCC版本不行??我用的ubuntu,然后直接用命令下载的gcc

来自:求助得到的回答
参考技术C 贴代码呀 你这几句太含糊啦追问

太长粘不了,麻烦直接跟我说下有哪几种原因会导致这种错误提示。除了头文件还有什么可能?sem_wait 是库函数,为什么会未定义?

追答

这个 ……
超级大牛会确切回答你 我没办法 菜鸟一个

以上是关于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'