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

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

编译时加上参数:-lpthread

要看报错的阶段,是在编译还是链接阶段.

如果编译时函数没有找到,那是头文件的问题,如果链接时未定义引用,那是c库的问题.

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

你看的是内核编程或驱动,用的是内核的头文件,在内核目录源码的include里:

<asm/semaphore.h>

void down(struct semaphore *sem)

int down_interruptible(struct semaphore *sem)

int down_trylock(struct semaphore *sem)

。。。。。。。

而应用编程对应的在/usr/include

一个是semaphore set 在 "sys/sem.h" 里

一个是semaphore 在semaphore里

至于这连个的区别和标准参见unix system program 一书

sem_acquire

(PHP3 >= 3.0.6, PHP4)

sem_acquire --- 获得信号

语法 : int sem_acquire (int sem_identifier)

说明 :

成功则传回true,失败则传回false。

sem_acquire( )封锁(非必要的话)直到信号能被获得,如果获得信号超出max_acquire的值,则会先锁住信号再试着去获得信号。

在处理一请求之后,任何以处理所获得的信号但是却没有明确的释放,将会自动地释放并且将会产生警告。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/433734.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-28
下一篇2023-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存