2012-01-19 113 views
1

我想链接HessianKit与简单的Xcode iOS测试项目。 我尝试了不同的构建配置。 我将-ObjC开关添加到库项目和我的主项目的链接器命令行中。HessianKit链接失败

这是从主项目中的命令行:

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

HessianKit.framework在哪里?也许你需要指定一个框架的路径? (在clang命令行上是-F)。 通过进入目标设置,选择Build Phases,然后在Compile Sources部分选择HessianKit文件,点击return并且出现一个对话框,您可以禁用特定文件的ARC。输入'-fno-objc-arc'。 –

+0

迈克,非常感谢您的评论!我将HessianKit.framework目录添加到构建选项中(花了我几分钟的时间才得到它),现在有一个-F开关用于使用正确的路径(错误的路径产生警告)。但是,链接器失败仍然存在。 –

+0

禁用ARC的“技巧”工作得很好,所以我现在可以直接嵌入HessianKit!谢谢! ;-) –

回答

0

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

的解决问题的办法在这个岗位描述:https://stackoverflow.com/a/7866167/1366367

显然,iPhone模拟器要求图书馆建成为I386架构不的ARMv7

这为我工作:

  1. 打开项目HessianKit(从SourceForge下载)
  2. 组基本SDK上HessianKit目标iphonesimulator
  3. 清除基地SDK为StaticHessianKit目标(应该默认为iphonesimulator )
  4. 运行内部版本
  5. 查找libStaticHessianKit.a在〜/ Library/Develope r/Xcode/DerivedData/*/Build/Products/Debug-iphonesimulator文件夹
  6. 将libStaticHessianKit.a拖放到您的项目中。这应该自动设置库搜索路径。
  7. 将HessianKit框架文件夹拖放到您的项目中。
  8. 确保你,你正在使用HessianKit导入此:

    #import <HessianKit/HessianKit.h> 
    

好运。

+0

非常感谢! ;-)应该很明显,它必须是i386。 –