【问题标题】:Undefined reference even with mongoose.h included即使包含 mongoose.h 也未定义引用
【发布时间】:2016-06-28 12:31:50
【问题描述】:

我正在尝试运行 mongoose c 服务器示例,但是当我尝试编译示例时。我收到以下错误。如果我将它包含在标题中,这些引用怎么会丢失?我正在用mingw在windows下编译。

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;
}

【问题讨论】:

    标签: c windows compiler-errors undefined-reference mongoose-web-server


    【解决方案1】:

    您还需要确保链接到 mongoose 库。 -l 标志用于(与 gcc 一起)指定要链接的库,然后直接给出名称:-lmongoose

    完整的命令行命令是:

    gcc -lmongooose echo_server.c -out echo_server

    编辑:OP 说这不起作用,因为“mingw 说它找不到它。”

    您可能还需要添加库搜索路径标志-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

    【讨论】:

    • 如果您在 Windows 上,您可能还需要链接到 ws2_32.lib
    【解决方案2】:

    #include 指令既不会导致也不会消除未定义的引用错误; #include 仅包含库的 header 文件; 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)。

    【讨论】:

    • 我用-lmongoose 尝试了那个命令,但是mingw 说它找不到它。
    【解决方案3】:

    查看此文档here

    你可以简单地编译你的代码

    cc my_app.c mongoose.c
    

    简单!

    如果你的主程序是 C++ 然后使用 c++

    c++ main.cpp monoose.c
    

    我不知道您正在使用的操作系统和编译器,但它适用于我在 ubuntu 中使用基本 gcc 和 g++ 编译器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2021-02-22
      • 2022-11-26
      • 1970-01-01
      相关资源
      最近更新 更多