问题描述
今天在做用消息队列实现进程间通信的案例时,明明已经在包含了头文件"mqueue.h",但是却在编译阶段报了一个找不到库函数的小错误。如下:
producer.c:(.text+0x8c): undefined reference to `mq_open'
/usr/bin/ld: producer.c:(.text+0x155): undefined reference to `mq_timedsend'
/usr/bin/ld: producer.c:(.text+0x19b): undefined reference to `mq_timedsend'
collect2: error: ld returned 1 exit status
解决方案:
在编译命令后面链接上librt实施扩展库
gcc -o producer producer.c -lrt
添加"-lrt"参数是因为"mqueue.h"中的函数(例如"mq_open"、"mq_timedsend"、"mq_timedreceive"等函数)是POSIX实时扩展库(librt)的一部分,POSIX实时扩展库提供了实时功能的支持,这些支持在标准的C库中不存在,因此在编译的时候需要显式链接该库。