簡體   English   中英

如何在 Unix 網絡編程中使用頭文件

[英]How to use headers in Unix Network Programming

我正在閱讀經典書籍Unix網絡編程,我遇到了一個關於編譯的問題。
例如,我可以正確編譯/home/song/unpv13e/tcpcliserv/tcpserv01.c 的源代碼。 在我將其復制到 /home/song/unpv13e/tcpcliserv/test.c 並制作 test.c 后,它提醒我錯誤,如下所示。

/tmp/ccI4xfzr.o: In function `main':

/home/song/unpv13e/tcpcliserv/test.c:11: 未定義引用Socket' /home/song/unpv13e/tcpcliserv/test.c:18: undefined reference to Bind' /home/song/unpv13e/tcpcliserv/test .c:20: 未定義引用Listen' /home/song/unpv13e/tcpcliserv/test.c:21: undefined reference to Signal' /home/yuhongsong/unpv13e/tcpcliserv/test.c:31: 未定義引用Close' /home/song/unpv13e/tcpcliserv/test.c:24: undefined reference to Accept' 的Close' /home/song/unpv13e/tcpcliserv/test.c:24: undefined reference to /home/song/unpv13e/tcpcliserv/test.c:26: 未定義對Fork' /home/song/unpv13e/tcpcliserv/test.c:27: undefined reference to引用Fork' /home/song/unpv13e/tcpcliserv/test.c:27: undefined reference to Close' /home/song/unpv13e/tcpcliserv/test.c:28: 未定義引用 `str_echo' collect2: 錯誤: ld 返回 1 退出狀態 make: *** [test] 錯誤 1

以大寫字母開頭的函數名在“unp.h”中定義。 問題出在哪里,如何解決,如何正確使用header。 源代碼如下所示:

#include "unp.h"
#include "sigchldwait.c"

int  main(int argc, char **argv)
{
    int                 listenfd, connfd;
    pid_t               childpid;
    socklen_t           clilen;
    struct sockaddr_in  cliaddr, servaddr;


    listenfd = Socket(AF_INET, SOCK_STREAM, 0);

    bzero(&servaddr, sizeof(servaddr));
    servaddr.sin_family      = AF_INET;
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    servaddr.sin_port        = htons(SERV_PORT);

    Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

    Listen(listenfd, LISTENQ);
        Signal(SIGCHLD, sig_chld);
    for ( ; ; ) {
        clilen = sizeof(cliaddr);
        connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);

        if ( (childpid = Fork()) == 0) {    /* child process */
            Close(listenfd);    /* close listening socket */
            str_echo(connfd);   /* process the request */
            exit(0);
        }
        Close(connfd);          /* parent closes connected socket */
    }
}

這是一個鏈接問題,你需要鏈接到這個庫。

您可能針對此庫正確編譯(使用標頭),但您沒有在庫時提供庫。

如果您從源代碼獲取它,您甚至可能需要編譯它。

問題是默認 make test.c 等於gcc -I../lib -g -O2 -D_REENTRANT -Wall -c -o test.o test.c .但是 test.c 需要一個靜態庫,其中函數例如接受來自。

暫無
暫無

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

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