2013-04-28 91 views
3

我正在试着学习一些libuv,看起来有一本很棒的书能够通过它。但是,这本书并没有解释如何实际编译它。我在github上编译的代码上运行make,并使用GYP编译(https://github.com/joyent/libuv)。不过,我不确定需要包含哪些类库才能获得编译代码。我试图编译此代码:库在os上编译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 

可有人

/* 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文件夹编译它给我一个关于如何构建libuv的快速教程,或者如果还有其他我需要的东西?

回答

4

好的,算出来了。我必须使用OSX“CoreFoundation”和“CoreServices”框架。以下命令编译成功:

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

感谢您的解决方案 - 我一直在努力解决同样的问题。

我开发你的答案,这样我可以编译和使用下列选项中的任何文件夹链接:

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

而且,我加入了图书馆为Eclipse中使用以下步骤:

将路径添加到头文件uv.h中:

右键单击项目并选择属性 - > C/C++常规 - >路径和符号 - >包括 。点击添加..,并在文本框中输入:

/my/folders/libuv/include/ 

点击适用─>好吧

添加库:

而在同一屏幕,如上,点击。点击添加..,并在文本框中输入:

uv 

到路径添加到库中:

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

/my/folders/libuv/ 

要添加的框架:

项目上单击鼠标右键属性 - > C/C++建设 - >设置 - >工具设置 - > Miscellaneous-> Mac OS X C++ Linker。然后在标题链接器标记添加文本框:

-framework CoreFoundation –framework CoreServices 

点击应用再建。

5

随着通过自制安装libuv做:

$ gcc -luv main.c 
0

您可以使用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 configuration

的最后一件事做的是告诉Xcode中哪里libuv的标题:

Headers configuration

See this post