Прошло довольно много времени с тех пор, как я писал программу на C, и даже в этом случае я всегда находил фактическую компиляцию и компоновку довольно запутанными.
Поскольку в последнее время я играю / работаю с node.js, мне стало достаточно любопытно, чтобы заглянуть под капот, и в настоящее время я смотрю на libuv.
Я нашел несколько отличных руководств, но обнаружил, что фактическая часть компиляции была в значительной степени пропущена. Скорее всего, из-за справедливого предположения, что кому интересно, наверное, много работает с gcc.
Я скачал последнюю версию libuv с gtihub в виде 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, но именно здесь я нахожусь, поэтому любая помощь будет очень признательна.
Я использую Убунту 13.04