символ (ы) не найден в приложении XCode, Cocoa - PullRequest
5 голосов
/ 21 июля 2009

Несмотря на то, что я немного поработал на Java и немного на C (++), я совершенно новичок в Apple 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 голосов
/ 21 июля 2009

Вы добавили IOKit в качестве связанного фреймворка? В XCode разверните Targets, затем свою цель (BatteryApp, я бы предположил), затем Link Binary With Libraries. Если вы не видите IOKit, вы захотите добавить его.

Вверху дерева найдите каталог Frameworks. Щелкните правой кнопкой мыши, Добавить, Существующие рамки. Перейдите к /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/(ptable SDK) /System/Library/Frameworks/IOKit.framework и нажмите OK.

Несмотря на то, что вы добавили версию фреймворка для симулятора, я уверен, что XCode автоматически переключит путь поиска в библиотеке при переключении между целями Simulator и Device, поэтому я думаю, что все в порядке.

4 голосов
/ 21 июля 2009

Полагаю, вы правы, полагая, что структура IOKit не связана правильно. Вот как вы можете убедиться:

  • Разверните группу «Цели» в дереве групп и файлов и дважды щелкните по цели, для которой требуется IOKit. (Или щелкните правой кнопкой мыши и выберите «Получить информацию»). Появится информационная панель цели.
  • Первая вкладка информационной панели - это то место, где мы должны быть. Нижняя половина вкладки представляет собой список связанных библиотек. IOKit, вероятно, отсутствует в этом списке, поэтому нажмите кнопку «плюс» в левом нижнем углу.
  • Прокрутите немного вниз, пока не увидите IOKit.framework. Выберите это и нажмите «Добавить». Это добавит IOKit к вашей платформе и свяжет его с целью.

Если вы уже добавили инфраструктуру IOKit в свой проект, то вам просто нужно убедиться, что она является частью фазы «Связать двоичные файлы с библиотеками» соответствующей цели. (Целевая группа> развернуть цель> связать двоичные файлы с библиотеками). Если его там нет, но он есть в вашем проекте, то вы можете либо выполнить действия, описанные выше, либо просто перетащить фреймворк из любого места в дереве групп и файлов.

0 голосов
/ 21 июля 2009

Я сам не эксперт в Xcode / cocoa-touch, но согласно этой ссылке похоже, что платформа IOKit недоступна для широкой публики.

В официальных документах я нашел цитату, описывающую IOKit как таковую: «Содержит интерфейсы, используемые устройством. Не включайте эту платформу напрямую». Так что, в конце концов, мое желание получить доступ к этой информации IOKit было сорвано. По какой-то причине Apple решила включить его в публичную структуру, но реальность такова, что это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...