OSX CGGetActiveDisplayList -> ld:未找到体系结构的符号 x86_64

OSX CGGetActiveDisplayList -> ld: symbol(s) not found for architecture x86_64

我正在尝试为 nodejs 模块编写跨系统显示管理。我在 windows 上取得了成功,但现在我卡在了 osx 上(linux 是下一个)。

我只是无法让这段代码正常工作。我正在使用 "make osx" 进行编译并且工作正常,只要我不使用 CGGetActiveDisplayList。 https://developer.apple.com/documentation/coregraphics/1454603-cggetactivedisplaylist

据我研究,我包含了正确的头文件,但我更怀疑这一点,但不能 find/see 任何其他信息。

如果我注释掉 CGGetActiveDisplayList 代码,CGDirectDisplayID 仍然会被接受,所以我假设它不是完全错误的。这可能很简单,但我已经卡了几个小时了,这很令人沮丧。

我尝试使用 osx.m (objective_c) 并得到同样的错误。

文件是"osx.cc"

#ifdef __APPLE__

#include <ApplicationServices/ApplicationServices.h>

int main(int argc, const char * argv[]){
    printf("\nHello!\n\n");
    CGDirectDisplayID displays[32];
    uint32_t count;//sizeof(displays)/sizeof(displays[0])
    if (CGGetActiveDisplayList(32, displays, &count) != kCGErrorSuccess)
    {
        printf("failed to get display list");
        exit(EXIT_FAILURE);
    }
}

#endif

感谢您的宝贵时间!

编辑:

make osx
c++     osx.cc   -o osx
Undefined symbols for architecture x86_64:
  "_CGGetActiveDisplayList", referenced from:
      _main in osx-b7fd55.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [osx] Error 1

import/include 头文件还不够,您必须将 Core Graphics 框架添加到链接器。框架名称显示在您引用的手册中。请看类似问题的回答Undefined symbols for architecture x86_64 in Objective-C

  1. Select 项目左侧项目导航器中的项目文件 window in xcode.
  2. Select 要在项目设置编辑器中添加框架的目标。
  3. Select“Build Phases”选项卡,然后单击“Link Binary With Libraries”旁边的小三角形以查看应用程序中的所有框架。
  4. 要添加框架,请单击框架列表下方的“+”。
  5. Select 个所需的框架。