C 要在os x上编译libuv的库?

C 要在os x上编译libuv的库?,c,shared-libraries,libuv,C,Shared Libraries,Libuv,我正在努力学习一些libuv,似乎有一本很棒的书在里面。然而,这本书并没有解释如何实际编译它。我在从github提取的代码上运行make,并按照github()上的描述使用GYP进行编译。但是,我不确定需要包含什么样的库来编译代码。我试图编译以下代码: /* first.c */ #include <stdio.h> #include <uv.h> int main() { uv_loop_t *loop = uv_loop_new(); printf

我正在努力学习一些libuv,似乎有一本很棒的书在里面。然而,这本书并没有解释如何实际编译它。我在从github提取的代码上运行make,并按照github()上的描述使用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;
}
我得到了以下缺失的符号:

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的快速教程,或者如果我还需要什么的话?

好的,找到答案。我必须使用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,请执行以下操作:

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

/my/folders/libuv/include/
uv
单击应用->确定

要添加库,请执行以下操作:

在同一屏幕中,如上所述,单击库。单击添加..并在文本框中输入:

/my/folders/libuv/include/
uv
要将路径添加到库,请执行以下操作:

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

/my/folders/libuv/
要添加框架,请执行以下操作:

右击项目> Projt:C+C++ Buff-> >设置>工具设置> >杂项> Mac OS XC++链接器< /强>。然后在标题为链接器标志的文本框中添加:

-framework CoreFoundation –framework CoreServices

单击应用,然后使用通过自制安装的
libuv
构建。

$ gcc -luv main.c

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

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

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

最后一件事是告诉Xcode libuv的头在哪里: