HessianKit链接失败

时间:2012-01-19 08:53:05

标签: iphone objective-c xcode linker hessian

我正在尝试将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构建)。

Screenshot Failure

这是显示要链接的库的内容的一些输出:

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,这会产生编译错误。

你有什么建议我可以试试吗?非常感谢。

的Matthias

1 个答案:

答案 0 :(得分:0)

我是Xcode的新手,能够解决这个问题。我正在尝试在我正在开发的项目中使用HessianKit。

此帖中描述了问题的解决方案:https://stackoverflow.com/a/7866167/1366367

显然,iPhone模拟器需要为 i386 架构而不是 armv7 构建库。

这对我有用:

  1. 打开Project HessianKit(从sourceforge下载)
  2. 将HessianKit目标上的Base SDK设置为 iphonesimulator
  3. Clear Base SDK for StaticHessianKit目标(默认为iphonesimulator)
  4. 运行构建
  5. 〜/ Library / Developer / Xcode / DerivedData / * / Build / Products / Debug-iphonesimulator 文件夹中找到libStaticHessianKit.a
  6. 将libStaticHessianKit.a拖到您的项目中。这应该会自动设置库搜索路径。
  7. 将HessianKit框架文件夹拖到您的项目中。
  8. 请确保将其导入到使用HessianKit的地方:

    #import <HessianKit/HessianKit.h>
    
  9. 祝你好运。