Objective c 在XCode、Cocoa应用程序中找不到符号

Objective c 在XCode、Cocoa应用程序中找不到符号,objective-c,Objective C,虽然我用Java做了一些开发,用C++做了一些开发,但我对苹果的Objective C和XCode完全陌生 因此,我完全被以下错误消息难住了: Building target “BatteryApp” of project “BatteryApp” with configuration “Debug” — (1 error) cd /Users/soren/Documents/BatteryApp setenv MACOSX_DEPLOYMENT_TARGET 10.5

虽然我用Java做了一些开发,用C++做了一些开发,但我对苹果的Objective C和XCode完全陌生

因此,我完全被以下错误消息难住了:

Building target “BatteryApp” of project “BatteryApp” with configuration “Debug” — (1 error)
        cd /Users/soren/Documents/BatteryApp
    setenv MACOSX_DEPLOYMENT_TARGET 10.5
    /Developer/usr/bin/gcc-4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -L/Users/soren/Documents/BatteryApp/build/Debug -F/Users/soren/Documents/BatteryApp/build/Debug -filelist /Users/soren/Documents/BatteryApp/build/BatteryApp.build/Debug/BatteryApp.build/Objects-normal/i386/BatteryApp.LinkFileList -mmacosx-version-min=10.5 -framework Cocoa -o /Users/soren/Documents/BatteryApp/build/Debug/BatteryApp.app/Contents/MacOS/BatteryApp
Undefined symbols:
  "_IOPSCopyPowerSourcesList", referenced from:
      _main in main.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
          "_IOPSCopyPowerSourcesList", referenced from:
              _main in main.o
        ld: symbol(s) not found
        collect2: ld returned 1 exit status
它来自默认的Cocoa应用程序,main.m如下所示:

import <Cocoa/Cocoa.h>
import <IOKit/ps/IOPowerSources.h>

int main(int argc, char *argv[])
{
    CFTypeRef powerInfo;
    IOPSCopyPowerSourcesList(powerInfo);
    NSLog(@"Foo");
    //return NSApplicationMain(argc,  (const char **) argv);
}
导入
进口
int main(int argc,char*argv[])
{
CFTypeRef-powerInfo;
IOPSCopyPowerSourcesList(powerInfo);
NSLog(@“Foo”);
//返回NSApplicationMain(argc,(const char**)argv);
}
(记住——我只是在这里弄湿了脚……主要是通过搞砸来学习:))

我猜IOKit库没有正确链接(如果我正确解释了g++的神秘思想…),但我不知道如何实际链接它

非常感谢您的帮助,也请提供有关创建自己的Objective C应用程序的教程链接


干杯

您是否已将IOKit添加为链接框架?在XCode中,展开目标,然后展开目标(我猜是BatteryApp),然后将二进制文件链接到库中。如果你没有看到IOKit,你会想添加它

在树的顶部,查找Frameworks目录。右键单击,添加现有框架。浏览到/Developer/Platforms/iPhoneSimulator.platform/Developer/SDK/(适当的SDK)/System/Library/Frameworks/IOKit.framework,然后单击OK


尽管您添加了框架的模拟器版本,但我相信,当您在模拟器和设备目标之间切换时,XCode将自动切换库搜索路径,因此我认为这没问题。

我相信您认为IOKit框架链接不正确是正确的。以下是如何确保:

  • 展开“组和文件”树中的“目标”组,双击需要IOKit的目标。(或右键单击并选择获取信息)目标的信息面板将出现
  • 信息面板的第一个选项卡是我们需要的位置。选项卡的下半部分是链接库的列表。IOKit可能不在该列表中,因此单击左下角的加号按钮
  • 向下滚动一点,直到看到IOKit.framework。选择该选项,然后单击“添加”。这将把IOKit添加到您的框架中,并将其链接到目标中

如果您已经将IOKit框架添加到您的项目中,那么您只需要验证它是否是适当目标的“链接二进制文件与库”阶段的一部分。(目标组>展开目标>将二进制文件链接到库)。如果它不在那里,但在您的项目中,那么您可以按照上面的步骤操作,或者只需将框架从组和文件树中的任何位置拖放即可。

我本人并不擅长Xcode/cocoa touch,但根据link,似乎IOKit框架不适用于一般公众

在官方文档中,我发现了一段描述IOKit的引语:“包含设备使用的接口。不要直接包含此框架。”因此,最终,我访问IOKit信息的愿望遭到了挫败。无论出于何种原因,苹果选择将其列为公共框架,但事实并非如此


干杯成功了!我也是SO新手,所以我希望只要点击“v”就足以为您提供回答我问题的道具?