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 を使用しています