【问题标题】:Frustrating iPhone Build Error令人沮丧的 iPhone 构建错误
【发布时间】:2011-04-03 23:50:16
【问题描述】:

我已经为此奋斗了几个小时,我已经受够了。我的项目使用调试模拟器构建、发布模拟器构建和调试设备构建构建良好,但由于某种原因,它不会使用发布设备构建构建。我有一个包含我的 cocos2d 代码的静态库,以及另一个包含我编写的游戏引擎的静态库。

因为游戏引擎包含类别,我不得不使用 all_load 链接器标志来让它运行。没有这个标志,代码构建得很好。但是,当我尝试运行游戏时,我收到一个无法识别的选择器发送到实例异常。

这是第一个构建错误:

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)

Ld build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless normal armv6
cd /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 -arch armv6 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -L/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -F/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -filelist /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless.LinkFileList -dead_strip -ObjC -all_load -miphoneos-version-min=4.0 /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libChipmunk.a /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a /Users/helixed/Dropbox/Documents/Development/iPhone/BlackHawk/build/Release-iphoneos/libBlackHawk.a -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework OpenGLES -framework OpenAL -framework AVFoundation -framework AudioToolbox -lz -framework iAd -o /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv6/Shapeless

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1

这是第二个:

Ld build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless normal armv7
cd /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless
setenv IPHONEOS_DEPLOYMENT_TARGET 4.0
setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.0.sdk -L/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -F/Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Release-iphoneos -filelist /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless.LinkFileList -dead_strip -ObjC -all_load -miphoneos-version-min=4.0 /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libChipmunk.a /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a /Users/helixed/Dropbox/Documents/Development/iPhone/BlackHawk/build/Release-iphoneos/libBlackHawk.a -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -framework OpenGLES -framework OpenAL -framework AVFoundation -framework AudioToolbox -lz -framework iAd -o /Users/helixed/Dropbox/Documents/Development/iPhone/Apps/Shapeless/build/Shapeless.build/Release-iphoneos/Shapeless.build/Objects-normal/armv7/Shapeless

ld: duplicate symbol _OBJC_CLASS_$_FontLabel in /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o) and /Users/helixed/Dropbox/Documents/Development/iPhone/Cocos2d/build/Release-iphoneos/libcocos2d.a(FontLabel.o)
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-g++-4.2 failed with exit code 1

这是阻止我发布的唯一想法,所以我非常感谢您的帮助。

谢谢。

【问题讨论】:

  • 好吧,我已经放弃尝试让它工作了。现在我唯一的解决方案就是共享代码目录。

标签: iphone xcode build cocos2d-iphone


【解决方案1】:

我遇到了类似的问题,我不小心包含(#import)实现文件而不是头文件

当编译器抛出 2 个目标文件包含重复符号的错误时,请检查您如何在 2 个实现文件中包含(#import)该重复符号的类。

【讨论】:

    【解决方案2】:

    我在添加 Facebook sdk 和 Dropbox sdk 时遇到了这个问题。问题是两个 SDk 都使用了 JSON lib,所以我删除了其中一个,因为它现在可以工作了。

    【讨论】:

      【解决方案3】:

      您的项目结构中有两次吗?检查 XCode 的左侧并查看所有文件夹并确保您没有多次将其放入其中。

      【讨论】:

      • 要检查的另一件事是确保您的目标正确。检查构建目标并确保所有正确的库都在那里。
      • 如果它被包含两次或库不存在,那么其他配置之一的构建不会失败吗?
      【解决方案4】:

      您的发布版本中的设备架构集(armv6、armv7 等)是否与调试版本设置(项目或覆盖项目设置的目标)中不同?

      【讨论】:

      • 不幸的是,这似乎不是问题所在。不过感谢您的回复。
      【解决方案5】:

      我认为您的问题的解决方案在于您尝试使用 -all_load 标志解决的无法识别的选择器问题。我在静态库中使用 cocos2d-iphone 并且不需要那个标志。如果您阅读了它的作用,它应该会告诉您它不太可能与您的问题有关:

      What does the -all_load linker flag do?

      它修复了链接到只包含类别和不包含类的静态库。 cocos2d-iphone 肯定不是这样。

      我建议弄清楚为什么在没有此标志的情况下会收到无法识别的选择器警告。如有必要,请在此处提出另一个问题。

      您还应该在项目的 Build Settings 中打开“Unrecognized Selector”构建警告,以便在编译时收到此警告,而不是在运行游戏时崩溃(然后为时已晚,您浪费了很多时间)。这是我在 Xcode 项目中始终打开的设置之一。

      【讨论】:

      • 感谢您的详细回复。我阅读了那篇文章,但我将其解释为包含任何类别。但是,我试图通过类别解决的问题位于我的引擎中。我基本上添加了一个扩展 cocos2d 类的类别。如果没有 -all_load 标志,我会收到无法识别的选择器警告。有了它,我得到了那些构建错误。如果 all_load 标志不是必需的,那么我应该改用什么?根据我的阅读,这就是 ObjC 标志的用途,但显然有一个错误阻止它工作。我应该从哪里解决这个问题?
      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多