编译libuv在OS X上需要使用哪些库?

3
我正在尝试学习一些libuv相关的技术,似乎有一本很好的书可以帮助我了解。然而,这本书没有解释如何编译它。我从Github上下载了代码并使用GYP进行编译,具体步骤可参考Github (https://github.com/joyent/libuv)。但是我不确定需要包含哪些库才能使代码编译通过。我尝试编译了以下代码:
/* 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个回答

9

如果您通过homebrew安装了libuv,请执行以下步骤:

$ gcc -luv main.c

7

好的,我明白了。我需要使用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++构建->设置->工具设置->其他->Mac OS X C++链接器。然后在标题为链接器标志的文本框中添加:

-framework CoreFoundation –framework CoreServices

点击应用,然后进行构建。


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

看看这篇文章


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接