自从我用 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