即使我在我的Makefile中链接了-lrt,如下面所示,我仍然会收到undefined reference to 'mq_open'。请帮忙!

all:get1 iserv1
get: get1.c
    gcc -Wall -o get1 get1.c -lrt
iserv: iserv1.c
    gcc -Wall -o iserv1 iserv1.c -lrt
clean:
    rm -fr *~ get1 iserv1

最佳答案

您的makefile错误

all:get1 iserv1
get: get1.c
    gcc -Wall -o get1 get1.c -lrt
all具有get1iserv1的先决条件。但是您创建了一个get目标和一个iserv目标。所以将使用默认的make规则编译get1,该规则不包含-lrt(如果您查看实际执行的gcc命令,则应显示该规则。)

您的makefile应该像这样:
all:get1 iserv1
get1: get1.c
    gcc -Wall -o get1 get1.c -lrt
iserv1: iserv1.c
    gcc -Wall -o iserv1 iserv1.c -lrt
clean:
    rm -fr *~ get1 iserv1

10-08 01:37