4

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

4

2 に答える 2

9

私が動作させることができる最も単純な Makefile はこれですが、明らかに、システム上の libuv.a の場所に固有のものです。より一般的なコンパイル行を提供するこの回答の編集/新しい投稿を歓迎します。

main: main.c
    gcc -o main main.c /usr/local/lib/libuv.a -pthread
clean:
    rm main
于 2013-10-11T11:12:29.420 に答える