【问题标题】:How can I compile a minimum program with libuv?如何使用 libuv 编译最小程序?
【发布时间】:2013-10-19 09:12:58
【问题描述】:

自从我用 C 编写程序以来已经有一段时间了,即使如此,我仍然发现实际的编译和链接非常混乱。

由于我最近一直在玩/使用 node.js,我已经变得足够好奇,开始窥探引擎盖下的内容,目前正在研究 libuv。

我找到了一些优秀的指南,但发现实际的编译部分已被大量跳过。很可能是由于公平的假设,即有趣的人可能经常使用 gcc。

我已经从 gtihub 下载了最新的 libuv 作为 zip 并解压缩到一个工作文件夹中。我按照 README.md 编译并安装了它。这一切都很顺利,没有任何问题。

我要编译的代码来自http://nikhilm.github.io/uvbook/basics.html

#include <stdio.h>
#include <uv.h>

int main() {
    uv_loop_t *loop = uv_loop_new();

    printf("Now quitting.\n");
    uv_run(loop, UV_RUN_DEFAULT);

    return 0;
}

我已将此保存为 main.c

这是我正在使用的 Makefile,我怀疑这是问题所在,因为它是从各种来源拼凑而成的,我在这方面的知识至少可以说是模糊的。

main: main.c
    gcc -g  -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I./libuv-master/include/ -o main main.c -pthread -lrt -lm
clean:
    rm main

这是运行 make 的结果。

/tmp/ccJbU03z.o: In function `main':
/home/tom/libuv-test/main.c:5: undefined reference to `uv_loop_new'
/home/tom/libuv-test/main.c:8: undefined reference to `uv_run'
collect2: error: ld returned 1 exit status

我意识到这并不完全特定于 libuv,但这正是我所处的位置,因此非常感谢任何帮助。

我使用的是 Ubuntu 13.04

【问题讨论】:

    标签: c gcc makefile libuv


    【解决方案1】:

    我可以制作的最简单的 Makefile 就是这个,但显然它特定于我系统上 libuv.a 的位置。我欢迎对此答案的编辑/新帖子提供更通用的编译行。

    main: main.c
        gcc -o main main.c /usr/local/lib/libuv.a -pthread
    clean:
        rm main
    

    【讨论】:

      【解决方案2】:

      为了稍微改进之前的答案,可以使用pkg-config 来避免对路径进行硬编码:

      LDFLAGS = `pkg-config --libs libuv`
      
      main: src/main.c
          $(CC) -o main src/main.c $(LDFLAGS)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 1970-01-01
        • 2014-11-25
        • 2014-12-30
        相关资源
        最近更新 更多