【问题标题】:Which library to link (OSX)链接哪个库(OSX)
【发布时间】:2012-12-10 13:22:33
【问题描述】:

有人可以帮我纠正一下吗。我正在使用 -lIOKit 进行链接,但显然也需要另一个库。

Undefined symbols for architecture x86_64:
  "___CFConstantStringClassReference", referenced from:
      CFString in code-9daAw9.o
  "_kCFBooleanTrue", referenced from:
      _dimDisplayNow in code-9daAw9.o

这是代码(位于http://www.cocoabuilder.com/archive/cocoa/191807-sleep-display.html

#include <CoreFoundation/CoreFoundation.h>
#include <IOKit/IOKitLib.h>

static int dimDisplayNow(void) 
{
    io_registry_entry_t r =
        IORegistryEntryFromPath(kIOMasterPortDefault,
        "IOService:/IOResources/IODisplayWrangler");
    if(!r) return 1;
    int err = IORegistryEntrySetCFProperty(r, CFSTR("IORequestIdle"),
                                           kCFBooleanTrue);
    IOObjectRelease(r);
    return err;
}

int main(int argc, char **argv)
{
    dimDisplayNow();
    return 0;
}

【问题讨论】:

  • “架构 x86_64 的未定义符号”这可能意味着您只有 32 位版本的库。如果使用-m32 构建有效,那就是它。
  • 不,同样的错误,但从 x86_64 更改为 i386
  • 嗯,不错,值得一试。对不起,我在这里帮不了你,不知道可可(那是 Mac,不是吗?)。

标签: c macos build linker


【解决方案1】:

您需要链接CoreFoundation.framework,这是您在第一行代码中包含的内容。 (___CFConstantStringClassReferencekCFBooleanTrue 中的 CF 代表 CoreFoundation)。

【讨论】:

  • 是的,我也这么认为,但我得到了ld: library not found for -lCoreFoundation,而且在/usr/libIOKit 所在的位置)中确实没有任何可能。图书馆叫什么/它在哪里?
  • 使用-framework CoreFoundation 而不是-l。 (它在/System/Library/Frameworks,但你不必太担心。)
  • 谢谢。遗憾的是,该程序对我不起作用,但它现在可以编译了:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多