clang: error: сбой команды компоновщика с кодом выхода 1 (используйте -v для просмотра вызова) MINIX3

Я пытаюсь запустить приложение C / C ++ на MINIX3, которое должно отправлять сообщения между двумя процессами, используя msgsnd () и msgget (), используя msg.h.

Это ошибка, которую я получаю:

send.cpp:(.text+0x7f): undefined reference to `msgget'
send.cpp:(.text+0x1c1): undefined reference to `msgsnd'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я использую Clang ++ для компиляции кода:

clang++ send.cpp -o send.out

Это код send.cpp:

#include <lib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MSGSZ     128
/*
* Declare the message structure.
*/

typedef struct msgbufer {
long    mtype;
char    mtext[MSGSZ];
} message_buf;

int main()
{
int msqid;
int msgflg = IPC_CREAT | 0666;
key_t key;
message_buf sbuf;
size_t buf_length;

/*
* Get the message queue id for the
* "name" 1234, which was created by
* the server.
*/
key = 1234;

(void)fprintf(stderr, "\nmsgget: Calling msgget(%i,\
%#o)\n",
key, msgflg);

if ((msqid = msgget(key, msgflg)) < 0) {
perror("msgget");
exit(1);
}
else
(void)fprintf(stderr, "msgget: msgget succeeded: msqid = %d\n", msqid);/*
* We'll send message type 1
*/

sbuf.mtype = 1;

(void)fprintf(stderr, "msgget: msgget succeeded: msqid = %d\n", msqid);

(void)strcpy(sbuf.mtext, "Hello other process 2.");

(void)fprintf(stderr, "msgget: msgget succeeded: msqid = %d\n", msqid);

buf_length = strlen(sbuf.mtext) + 1;/*
* Send a message.
*/
if (msgsnd(msqid, &sbuf, buf_length, IPC_NOWAIT) < 0) {
printf("%d, %li, %s, %lu\n", msqid, sbuf.mtype, sbuf.mtext, buf_length);
perror("msgsnd");
exit(1);
}

else
printf("Message: \"%s\" Sent\n", sbuf.mtext);

exit(0);
}

0

Решение

Вы не связываетесь с библиотекой, которая содержит msgsnd а также msgget функции, так что ваш шаг компоновщика не удается. Я не знаком с Minix, поэтому я не уверен, где хранится библиотека или как она называется. В основном вам нужно -l<msg> пометить ваш шаг ссылки. куда <msg> это имя библиотеки, которая содержит реализацию.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]