Ошибка связывания HessianKit - PullRequest
1 голос
/ 19 января 2012

Я пытаюсь связать HessianKit с простым тестовым проектом Xcode iOS.Я пробовал разные конфигурации сборки.Я добавил ключ -ObjC в командную строку компоновщика для проекта библиотеки и для моего основного проекта.

Это командная строка из основного проекта:

Ld /Users/wuttke/Library/Developer/Xcode/DerivedData/MatthiasSimpleTest-gfekzjmarzscwwgbynkuztivwkpw/Build/Products/Debug-iphonesimulator/MatthiasSimpleTest.app/MatthiasSimpleTest normal i386
cd /Users/wuttke/Documents/MatthiasSimpleTest
setenv MACOSX_DEPLOYMENT_TARGET 10.6
setenv PATH "/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang -arch i386 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk -L/Users/wuttke/Library/Developer/Xcode/DerivedData/MatthiasSimpleTest-gfekzjmarzscwwgbynkuztivwkpw/Build/Products/Debug-iphonesimulator -L/Users/wuttke/Documents/MatthiasSimpleTest/MatthiasSimpleTest -L/Users/wuttke/Documents/MatthiasSimpleTest -F/Users/wuttke/Library/Developer/Xcode/DerivedData/MatthiasSimpleTest-gfekzjmarzscwwgbynkuztivwkpw/Build/Products/Debug-iphonesimulator -F/Users/wuttke/Documents/MatthiasSimpleTest -filelist /Users/wuttke/Library/Developer/Xcode/DerivedData/MatthiasSimpleTest-gfekzjmarzscwwgbynkuztivwkpw/Build/Intermediates/MatthiasSimpleTest.build/Debug-iphonesimulator/MatthiasSimpleTest.build/Objects-normal/i386/MatthiasSimpleTest.LinkFileList -mmacosx-version-min=10.6 -Xlinker -objc_abi_version -Xlinker 2 -fobjc-arc -Xlinker -no_implicit_dylibs -D__IPHONE_OS_VERSION_MIN_REQUIRED=50000 -framework UIKit -framework Foundation -framework CoreGraphics -framework HessianKit -o /Users/wuttke/Library/Developer/Xcode/DerivedData/MatthiasSimpleTest-gfekzjmarzscwwgbynkuztivwkpw/Build/Products/Debug-iphonesimulator/MatthiasSimpleTest.app/MatthiasSimpleTest

Это ошибкасообщение от компоновщика:

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_CWHessianConnection", referenced from:
      objc-class-ref in MainWindowController.o
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Я приложил снимок экрана, показывающий проект (он содержит HessianKit.framework, мы создаем для i386 / MacOS, iOS 5.0).1012 *

Это некоторый вывод, показывающий содержание библиотеки, которую нужно связать:

Tobiass-MacBook-Pro:HessianKit.framework wuttke$ pwd
/Users/wuttke/Documents/MatthiasSimpleTest/HessianKit.framework
Tobiass-MacBook-Pro:HessianKit.framework wuttke$ ls
Headers     HessianKit  Resources   Versions
Tobiass-MacBook-Pro:HessianKit.framework wuttke$ nm -arch i386 HessianKit | grep CWHessianConnection
000010a0 t +[CWHessianConnection proxyWithURL:protocol:]
00001020 t -[CWHessianConnection initWithHessianVersion:]
000011a0 t -[CWHessianConnection proxyWithURL:protocol:]
00001260 t -[CWHessianConnection setVersion:]
00001240 t -[CWHessianConnection version]
0000d000 S .objc_class_name_CWHessianConnection

Я нашел предложение попытаться включить файлы HessianKit напрямую в проект.Это дает ошибки компиляции из-за ARC.

Есть ли у вас какие-либо предложения, которые я мог бы попробовать?Большое спасибо заранее.

Матиас

1 Ответ

0 голосов
/ 07 мая 2012

Я очень плохо знаком с Xcode и смог решить эту проблему. Я пытался использовать HessianKit в проекте, который я разрабатываю.

Решение проблемы описано в этом посте: https://stackoverflow.com/a/7866167/1366367

Очевидно, что для симулятора iPhone требуются библиотеки для архитектуры i386 , а не armv7 .

Это сработало для меня:

  1. Открыть проект HessianKit (скачано с sourceforge)
  2. Установить Base SDK для цели HessianKit на iphonesimulator
  3. Очистить базовый SDK для цели StaticHessianKit (по умолчанию используется iphonesimulator)
  4. Run Build
  5. Найдите libStaticHessianKit.a в ~ / Library / Developer / Xcode / DerivedData / * / Build / Products / Debug-iphonesimulator папка
  6. Перетащите libStaticHessianKit.a в свой проект. Это должно автоматически настроить пути поиска в библиотеке.
  7. Перетащите папку фреймворка HessianKit в свой проект.
  8. Убедитесь, что вы импортируете это, где вы используете HessianKit:

    #import <HessianKit/HessianKit.h>
    

Удачи.

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