符号在XCode、Cocoa应用程序中未找到。

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);
}

记住-我只是在这里尝试学习...主要是通过犯错误来学习:)

我猜测IOKit库没有正确链接(如果我正确解释了g++的深奥言论...),但我不知道如何实际链接它?

任何帮助都将不胜感激-还有任何关于创建自己的Objective C应用程序的好教程链接。

谢谢!

3个回答

7
您是否已将IOKit添加为链接框架?在XCode中,展开Targets,然后选择您的目标(我猜是BatteryApp),然后选择“Link Binary With Libraries”。如果您没有看到IOKit,则需要将其添加。
在顶部的树形结构中,找到Frameworks目录。右键单击,选择“Add”,然后选择“Existing Frameworks”。浏览到/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/(适当的SDK)/System/Library/Frameworks/IOKit.framework,然后点击“OK”。
即使您添加了模拟器版本的框架,我认为XCode会自动切换库搜索路径,因此我认为这没问题。

谢谢!就是这个! 我也是 Stack Overflow 的新手,所以我希望只需点击“v”就足以给你回答我的问题的赞吧? - Søren Andersen

4
我认为你的想法是正确的,IOKit框架没有正确链接。以下是确认方法:
  • 展开“目标”组,双击需要IOKit的目标(或右键单击并选择“获取信息”),打开目标信息面板。
  • 信息面板的第一个选项卡是我们需要的。选项卡的底部一半是已链接库的列表。IOKit可能不在该列表中,因此请单击左下角的加号。
  • 向下滚动一点,直到看到IOKit.framework。选择它,然后单击“添加”。这将将IOKit添加到您的框架并将其链接到目标。

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


0

我自己不是Xcode/cocoa-touch的专家,但根据this链接,IOKit框架似乎并不对普通公众开放。

在官方文档中,我找到了一句话来描述IOKit:“包含设备使用的接口。不要直接包含此框架。”所以最终,我的访问IOKit信息的愿望被挫败了。由于某种原因,苹果选择将其列为公共框架,但实际情况并非如此。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接