-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说它找不到它。 –

相关问题