dyld:Snow Leopard中没有的符号,认为它处于不同的框架中,在Lion中没问题

时间:2012-05-21 19:32:50

标签: xcode macos cocoa

在我的OS X应用程序中,我正在调用SystemConfiguration框架中的SCPreferencesCreateWithAuthorization:

AuthorizationRef auth;
AuthorizationCreate(NULL, NULL, kAuthorizationFlagDefaults, &auth);
SCPreferencesRef prefRef = SCPreferencesCreateWithAuthorization(kCFAllocatorDefault,CFSTR("Get Connected"), NULL, auth);

这适用于Lion,但是当我在Snow Leopard中运行应用程序时,它会在调用该函数时崩溃。奇怪的是,崩溃日志表明它认为在IOKit中找到了这个符号

Dyld Error Message:
  Symbol not found: _SCPreferencesCreateWithAuthorization
  Referenced from: /Users/localadmin/Downloads/Get Connected.app/Contents/MacOS/Get Connected
  Expected in: /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit

我已将SystemConfiguration.framework链接到Xcode中的目标并在我的AppDelegate.h中导入了标题:

#import <SystemConfiguration/SystemConfiguration.h>

我做错了什么?为什么它在Lion下运行,而不是Snow Leopard。文档说它在10.5及更高版本中可用。

1 个答案:

答案 0 :(得分:2)

您是否也在与IOKit建立联系?尝试在链接顺序中先前移动SystemConfiguration。

似乎该符号也存在于Lion上的IOKit框架中。我不确定SystemConfiguration中的符号是否只是IOKit中的符号。

无论如何,您的应用程序依赖于IOKit中的应用程序,这是不可取的。

您可以使用nm -g -m ~/"Downloads/Get Connected.app/Contents/MacOS/Get Connected" | grep SCPref检查此内容。