3

私はいくつかの libuv を学ぼうとしていますが、それについて書かれたすばらしい本があるようです。ただし、この本では、実際にコンパイルする方法については説明していません。github からプルしたコードで make を実行し、github ( https://github.com/joyent/libuv ) で説明されているように GYP でコンパイルしました。ただし、コードをコンパイルするためにどの種類のライブラリを含める必要があるのか​​ わかりません。このコードをコンパイルしようとしました:

/* first.c */
#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;
}

libuvフォルダーから次のコマンドでコンパイルしました。

gcc -o first first.c build/Release/libuv.a

そして、次の不足しているシンボルを取得しました:

Undefined symbols for architecture x86_64:
  "_CFArrayCreate", referenced from:
      _uv__fsevents_init in libuv.a(fsevents.o)
  "_CFRunLoopAddSource", referenced from:
      _uv__cf_loop_runner in libuv.a(darwin.o)
  "_CFRunLoopGetCurrent", referenced from:
      _uv__cf_loop_runner in libuv.a(darwin.o)
  "_CFRunLoopRemoveSource", referenced from:
      _uv__cf_loop_runner in libuv.a(darwin.o)
  "_CFRunLoopRun", referenced from:
      _uv__cf_loop_runner in libuv.a(darwin.o)
  "_CFRunLoopSourceCreate", referenced from:
      _uv__platform_loop_init in libuv.a(darwin.o)
  "_CFRunLoopSourceSignal", referenced from:
      _uv__cf_loop_signal in libuv.a(darwin.o)
  "_CFRunLoopStop", referenced from:
      _uv__platform_loop_delete in libuv.a(darwin.o)
  "_CFRunLoopWakeUp", referenced from:
      _uv__cf_loop_signal in libuv.a(darwin.o)
  "_CFStringCreateWithCString", referenced from:
      _uv__fsevents_init in libuv.a(fsevents.o)
  "_CFStringGetSystemEncoding", referenced from:
      _uv__fsevents_init in libuv.a(fsevents.o)
  "_FSEventStreamCreate", referenced from:
      _uv__fsevents_init in libuv.a(fsevents.o)
  "_FSEventStreamInvalidate", referenced from:
      _uv__fsevents_close in libuv.a(fsevents.o)
  "_FSEventStreamRelease", referenced from:
      _uv__fsevents_close in libuv.a(fsevents.o)
  "_FSEventStreamScheduleWithRunLoop", referenced from:
      _uv__fsevents_schedule in libuv.a(fsevents.o)
  "_FSEventStreamStart", referenced from:
      _uv__fsevents_schedule in libuv.a(fsevents.o)
  "_FSEventStreamStop", referenced from:
      _uv__fsevents_close in libuv.a(fsevents.o)
  "_kCFRunLoopDefaultMode", referenced from:
      _uv__cf_loop_runner in libuv.a(darwin.o)
      _uv__fsevents_schedule in libuv.a(fsevents.o)
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status

誰かが libuv のビルド方法について簡単なチュートリアルを教えてくれますか?

4

4 に答える 4

9

libuv自作でインストールすると、次のようになります。

$ gcc -luv main.c
于 2015-08-12T11:33:18.867 に答える
5

わかりました。OSX の「CoreFoundation」および「CoreServices」フレームワークを使用する必要があります。次のコマンドは正常にコンパイルされます。

gcc -o first first.c build/Release/libuv.a -framework CoreFoundation -framework CoreServices
于 2013-04-28T02:43:44.253 に答える
1

解決策をありがとう - 私は同じ問題に苦しんでいました.

次のオプションを使用して、任意のフォルダーからコンパイルおよびリンクできるように、回答を作成しました。

gcc -o first -L/my/folders/libuv/ -I/my/folders/libuv/include/ first.c -luv -framework CoreFoundation -framework CoreServices

また、次の手順を使用してライブラリをEclipseに追加しました。

ヘッダー ファイル uv.h へのパスを追加するには:

プロジェクトを右クリックし、Properties->C/C++ General->Paths and Symbols->Includesを選択します。[追加.. ] をクリックし、テキスト ボックスに次のように入力します。

/my/folders/libuv/include/

[適用] -> [OK]をクリックします。

ライブラリを追加するには:

上記と同じ画面で、Librariesをクリックします。[追加.. ] をクリックし、テキスト ボックスに次のように入力します。

uv

ライブラリへのパスを追加するには:

引き続き同じ画面でLibrary Pathsをクリックします。[追加.. ] をクリックし、テキスト ボックスに次のように入力します。

/my/folders/libuv/

フレームワークを追加するには:

プロジェクトのProperties->C/C++Build->Setting->Tool Settings->Miscellaneous->Mac OS X C++ Linkerを右クリックします。次に、 Linker Flagsというタイトルのテキスト ボックスに次を追加します。

-framework CoreFoundation –framework CoreServices

[適用]をクリックしてからビルドします。

于 2013-05-02T18:53:48.523 に答える