Makefile编译TCP_IP项目时出现CommandParser库未定义引用错误
问题原因
报错涉及的mq_open、mq_timedreceive、mq_send都是POSIX消息队列的接口,这类接口的实现位于系统的实时库librt中。
CommandParser目录下的Makefile编译自身测试程序时,已经在链接参数中加入了-lrt,所以单独编译该目录不会报错;但你的TCP_IP项目根目录Makefile的LIBS配置中只引入了-lpthread,缺少-lrt参数,链接libcli.a时就无法找到对应函数的实现。
解决方案
有两种可行方案,按需选择即可:
- 方案一:补充链接依赖
直接修改项目根目录Makefile的LIBS变量,在末尾追加-lrt:
LIBS = -lpthread -L ./CommandParser -lcli -lrt
修改完成后重新执行make即可正常编译。
- 方案二:移除不必要的UT模块
如果你不需要使用CommandParser自带的单元测试功能,可以修改CommandParser目录下的Makefile,将OBJ变量中的ut/utinfra/ut_parser.o删除,重新编译生成的libcli.a就不会包含消息队列相关代码,也无需额外链接librt。
内容的提问来源于stack exchange,提问作者EmTor
相关产品推荐
相关产品推荐

