我正在尝试为nodejs模块编写跨系统显示管理。我在Windows上取得了成功,但现在我被困在osx上(linux是下一个)。
我只是无法获得这么短的代码。我正在使用“make osx”进行编译,只要我不使用CGGetActiveDisplayList,它就能正常工作。 https://developer.apple.com/documentation/coregraphics/1454603-cggetactivedisplaylist
据我所研究,我包含了正确的头文件,但我更怀疑这一点,但无法找到/看到任何其他信息。
如果我注释掉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
答案 0 :(得分:1)
导入/包含头文件是不够的,您必须将Core Graphics
框架添加到链接器。框架名称显示在您引用的手册中。请查看类似问题Undefined symbols for architecture x86_64 in Objective-C