簡體   English   中英

鐺:錯誤:鏈接器命令失敗,退出代碼為1(使用-v查看調用)MINIX3

[英]clang: error: linker command failed with exit code 1 (use -v to see invocation) MINIX3

我正在嘗試在MINIX3上運行C / C ++應用程序,該應用程序應該使用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);
}

您沒有鏈接到包含msgsndmsgget函數的庫,因此鏈接器步驟失敗。 我對Minix不熟悉,因此不確定該庫存儲在哪里或被稱為什么。 基本上,您需要在鏈接步驟中添加-l<msg>標志。 其中<msg>是包含實現的庫的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM