Ubuntu 消息队列 Makefile 错误
Ubuntu Message Queue Makefile Error
我在 Ubuntu 中遇到 C 中消息队列的问题。我用 VirtualBox 来 运行 Ubuntu.
我记错了 "undefined reference to mq_open. ld returned 1 exit status"。
我知道有一个与此相同的问题,但我尝试了该解决方案但没有奏效,所以我想再问一次。请帮忙!
这是我的代码,真的很简单,但我连编译都不会。
这是我的 deneme.c
#include <stdlib.h>
#include <mqueue.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include "sharedMsg.h"
int main()
{
mqd_t mq;
mq = mq_open(MQNAME, O_RDWR | O_CREAT, 0666, NULL);
}
这是我的sharedMsg.h
struct item{
char *word;
int lineNum;
};
#define MQNAME "/sentmsg"
最后这是我的 MakeFile
all: deneme
deneme: deneme.c
gcc -g -Wall -o deneme deneme.c -lrt
clean:
rm -fr *~ *.o
(注意:OP 已经编辑了问题并修复了此答案后的 Makefile)
您的 Makefile 已损坏。
您甚至看到链接器错误的原因是您可能执行了 make deneme
。在那种情况下 make
将尝试使用默认编译器选项编译 dename.c
(因为它没有找到名为 deneme
的目标)并且默认选项不包括 -lrt
.
您必须修复您的 Makefile(将 deneme1:
替换为 deneme:
)
all: deneme
deneme: deneme.c
gcc -g -Wall -o deneme deneme.c -lrt
clean:
rm -f deneme *~ *.o
您的 Makefile 的问题在于您的 all
目标依赖于 demene
,但指定 -lrt
的目标称为 demene1
。因此,默认推理规则启动并且 demene
尝试在没有 -lrt
的情况下进行链接。 deneme1
的规则也是错误的,因为它试图创建一个名为 deneme
的二进制文件,即使该规则应该创建 deneme1
。要解决此问题,请将第一行到第三行更改为
all: deneme1
deneme1: deneme.c
gcc -g -Wall -o deneme1 deneme.c -lrt
或第二行到
deneme: deneme.c
我在 Ubuntu 中遇到 C 中消息队列的问题。我用 VirtualBox 来 运行 Ubuntu.
我记错了 "undefined reference to mq_open. ld returned 1 exit status"。
我知道有一个与此相同的问题,但我尝试了该解决方案但没有奏效,所以我想再问一次。请帮忙!
这是我的代码,真的很简单,但我连编译都不会。
这是我的 deneme.c
#include <stdlib.h>
#include <mqueue.h>
#include <stdio.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/stat.h>
#include "sharedMsg.h"
int main()
{
mqd_t mq;
mq = mq_open(MQNAME, O_RDWR | O_CREAT, 0666, NULL);
}
这是我的sharedMsg.h
struct item{
char *word;
int lineNum;
};
#define MQNAME "/sentmsg"
最后这是我的 MakeFile
all: deneme
deneme: deneme.c
gcc -g -Wall -o deneme deneme.c -lrt
clean:
rm -fr *~ *.o
(注意:OP 已经编辑了问题并修复了此答案后的 Makefile)
您的 Makefile 已损坏。
您甚至看到链接器错误的原因是您可能执行了 make deneme
。在那种情况下 make
将尝试使用默认编译器选项编译 dename.c
(因为它没有找到名为 deneme
的目标)并且默认选项不包括 -lrt
.
您必须修复您的 Makefile(将 deneme1:
替换为 deneme:
)
all: deneme
deneme: deneme.c
gcc -g -Wall -o deneme deneme.c -lrt
clean:
rm -f deneme *~ *.o
您的 Makefile 的问题在于您的 all
目标依赖于 demene
,但指定 -lrt
的目标称为 demene1
。因此,默认推理规则启动并且 demene
尝试在没有 -lrt
的情况下进行链接。 deneme1
的规则也是错误的,因为它试图创建一个名为 deneme
的二进制文件,即使该规则应该创建 deneme1
。要解决此问题,请将第一行到第三行更改为
all: deneme1
deneme1: deneme.c
gcc -g -Wall -o deneme1 deneme.c -lrt
或第二行到
deneme: deneme.c