【问题标题】:Libraries to compile libuv on os x?在 os x 上编译 libuv 的库?
【发布时间】:2023-03-22 17:53:01
【问题描述】:

我正在尝试学习一些 libuv,似乎有一本很棒的书通过它。但是,这本书并没有解释如何实际编译它。我在从 github 中提取的代码上运行 make,并按照 github (https://github.com/joyent/libuv) 上的描述使用 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;
}

我使用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 的快速教程,或者我还需要什么吗?

【问题讨论】:

    标签: c shared-libraries libuv


    【解决方案1】:

    通过自制软件安装libuv

    $ gcc -luv main.c
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

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

        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/
        

        点击应用->确定

        添加库:

        在与上述相同的屏幕中,单击。点击Add..并在文本框中输入:

        uv
        

        添加库的路径:

        仍然在同一屏幕上单击 Library Paths。点击添加..并在文本框中输入:

        /my/folders/libuv/
        

        添加框架:

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

        -framework CoreFoundation –framework CoreServices
        

        点击应用然后构建。

        【讨论】:

          【解决方案4】:

          您可以使用 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 libuv 的头文件在哪里:

          See this post

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-11-04
            • 2011-03-21
            • 1970-01-01
            • 2011-03-05
            • 2011-09-01
            • 2016-05-04
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多