-1

我試圖運行mongoose c服務器示例,但是當我嘗試編譯示例時。我收到以下錯誤。如果將這些引用包含在頭文件中,這些引用如何丟失?我正在用mingw在windows下編譯。未定義的引用,即使包含mongoose.h

gcc echo_server.c -out echo_server 
echo_server.c:(.text+0x35): undefined reference to `mg_send' 
echo_server.c:(.text+0x4a): undefined reference to `mbuf_remove' 
echo_server.c:(.text+0x7f): undefined reference to `mg_mgr_init' 
echo_server.c:(.text+0x9b): undefined reference to `mg_bind' 
echo_server.c:(.text+0xb7): undefined reference to `mg_bind' 
echo_server.c:(.text+0xe7): undefined reference to `mg_mgr_poll' 

這是echo_server.c

#include "mongoose.h" 

static void ev_handler(struct mg_connection *nc, int ev, void *p) { 
    struct mbuf *io = &nc->recv_mbuf; 
    (void) p; 

    switch (ev) { 
    case MG_EV_RECV: 
     mg_send(nc, io->buf, io->len); // Echo message back 
     mbuf_remove(io, io->len);  // Discard message from recv buffer 
     break; 
    default: 
     break; 
    } 
} 

int main(void) { 
    struct mg_mgr mgr; 
    const char *port1 = "1234", *port2 = "127.0.0.1:17000"; 

    mg_mgr_init(&mgr, NULL); 
    mg_bind(&mgr, port1, ev_handler); 
    mg_bind(&mgr, port2, ev_handler); 

    printf("Starting echo mgr on ports %s, %s\n", port1, port2); 
    for (;;) { 
    mg_mgr_poll(&mgr, 1000); 
    } 
    mg_mgr_free(&mgr); 

    return 0; 
} 

回答

5

你需要確保與貓鼬庫以及鏈接。該-l標誌使用(與海灣合作委員會)指定庫鏈接,你再有的名稱直接算賬:-lmongoose

完整的命令行命令是:

gcc -lmongooose echo_server.c -out echo_server

編輯:OP說這不起作用,因爲「明明說它找不到它。」

您可能還需要添加庫搜索路徑標記-L以幫助gcc找到您嘗試鏈接的庫。用法如下:

gcc -L C:\path\to\library -lmongoose echo_server.c -out echo_server

本頁面可能有一些更多的信息,如果這仍然沒有解決OP的問題:http://www.mingw.org/wiki/HOWTO_Specify_the_Location_of_Libraries_for_use_with_MinGW

+0

你可能還需要鏈接到'ws2_32.lib'以及如果你在窗口上 –

1

#include指令既不引起也不刪除未定義的引用錯誤; #include只包括頭文件文件的庫; C編譯器需要頭文件來了解mongoose庫中函數,數據類型和變量的聲明。

這些錯誤來自鏈接器而不是,因爲它沒有找到這些符號的定義。在這種情況下,您沒有鏈接到libmongoose;嘗試使用以下命令行:

gcc echo_server.c -o echo_server -lmongoose 

或者,如果你沒有mongoose作爲一個庫,但在源做,

gcc -c mongoose.c 
gcc echo_server.c mongoose.o -o echo_server 

(在當前工作目錄中有mongoose.o)。

+0

我用'-lmongoose'試過這個命令,但是mingw說它找不到它。 –

相關問題