库在os x上编译libuv?

我正在尝试学习一些libuv,似乎有一本很棒的书可以通过它。 但是,这本书没有解释如何实际编译它。 我在github上提取的代码上运行make,并使用github( https://github.com/joyent/libuv )中描述的GYP编译。 但是我不确定我需要包含哪些库才能获得编译代码。 我试着编译这段代码:

/* first.c */ #include  #include  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的快速教程,或者我还需要什么?

通过自制软件安装libuv

 $ gcc -luv main.c 

好吧,想通了。 我必须使用OSX“CoreFoundation”和“CoreServices”框架。 以下命令成功编译:

 gcc -o first first.c build/Release/libuv.a -framework CoreFoundation -framework CoreServices 

谢谢你的解决方案 – 我正在努力解决同样的问题。

我开发了你的答案,以便我可以使用以下选项从任何文件夹编译和链接:

 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 。 单击Add ..并在文本框中输入:

 /my/folders/libuv/include/ 

单击Apply-> Okay

要添加库:

在同一屏幕中,如上所示,单击“ 库” 。 单击Add ..并在文本框中输入:

 uv 

要添加库的路径:

仍在同一屏幕上,单击“ 库路径” 。 单击添加..并在文本框中输入:

 /my/folders/libuv/ 

要添加框架:

右键单击项目Properties-> C / C ++ Build-> Setting-> Tool Settings-> Miscellaneous-> Mac OS X C ++ Linker 。 然后在标题为Linker Flags的文本框中添加:

 -framework CoreFoundation –framework CoreServices 

单击Apply然后构建。

您可以使用GYP为libuv生成xcodeproj(如libuv的README中所述),并将此xcodeproj添加到您的主Xcode项目中。

它可以通过简单的shell脚本自动化(便于更新)(假设您将libuv子模块放在Externals/libuv ,但可以更改):

 git submodule update --init git clone https://chromium.googlesource.com/external/gyp.git Externals/libuv/build/gyp Externals/libuv/gyp_uv.py -f xcode 

然后,您将能够将libuv作为依赖项添加到库中,以将目标链接到:

Xcode配置

最后要做的是告诉Xcode libuv的头文件在哪里:

标头配置

看这篇文章