首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在os x上编译libuv的库?

在os x上编译libuv的库?
EN

Stack Overflow用户
提问于 2013-04-28 10:04:40
回答 4查看 4.1K关注 0票数 3

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

代码语言:javascript
复制
/* 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文件夹中的以下命令编译了它:

代码语言:javascript
复制
gcc -o first first.c build/Release/libuv.a

我得到了以下缺失的符号:

代码语言:javascript
复制
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的快速教程,或者如果我还有其他需要的东西?

EN

回答 4

Stack Overflow用户

发布于 2015-08-12 19:33:19

通过自制软件安装libuv时,请执行以下操作:

代码语言:javascript
复制
$ gcc -luv main.c
票数 9
EN

Stack Overflow用户

发布于 2013-04-28 10:43:44

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

代码语言:javascript
复制
gcc -o first first.c build/Release/libuv.a -framework CoreFoundation -framework CoreServices
票数 5
EN

Stack Overflow用户

发布于 2013-05-03 02:53:49

谢谢你的解决方案--我也在为同样的问题而苦苦挣扎。

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

代码语言:javascript
复制
gcc -o first -L/my/folders/libuv/ -I/my/folders/libuv/include/ first.c -luv -framework CoreFoundation -framework CoreServices

另外,我使用以下步骤将该库添加到Eclipse中:

要添加头文件uv.h的路径,请执行以下操作:

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

代码语言:javascript
复制
/my/folders/libuv/include/

单击Apply->Okay

添加库的步骤:

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

代码语言:javascript
复制
uv

要将路径添加到库中,请执行以下操作:

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

代码语言:javascript
复制
/my/folders/libuv/

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

右键单击项目Properties->C/C++Build->Setting->Tool设置->其他->Mac C++链接器。然后在标题为链接器标志的文本框中添加:

代码语言:javascript
复制
-framework CoreFoundation –framework CoreServices

单击Apply,然后单击build。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16258794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档