【问题标题】:How to fix OALAudio Library for XCode 6 / Kobold2D (Linker Error)如何修复 XCode 6 / Kobold2D 的 OALAudio 库(链接器错误)
【发布时间】:2014-11-13 19:49:24
【问题描述】:

尝试在 Yosemite 上为 iOS 8.1/XCode 6 更新 Kobold2D/Cocos2d 2.1 项目。

使用此处提供的解决方案 (How to update Kobold2D 2.1 project to MacOS10.10 / XCode 6.1?) 后,我收到一个链接器错误,尽管所有尝试(重新启动、清理、删除和添加框架)仍然存在,并且使我的项目无法启动。 我无计可施;这是一个为期 3 年的项目,我正在碰壁... XCode 6.1 链接器错误如下所示:

Ld /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator/OME.app/OME normal i386
    cd /Users/fabian/Kobold2D/Kobold2D-2.1.0/OME
    导出 IPHONEOS_DEPLOYMENT_TARGET=7.1
    导出 PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin: /usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang++ -arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator8。 1.sdk -L/Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator -F/Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/ Products/Debug-iphonesimulator -filelist /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Intermediates/OME.build/Debug-iphonesimulator/OME-iOS.build/Objects-normal/i386/OME。 LinkFileList -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Foundation -framework AudioToolbox -framework OpenAL -framework QuartzCore -framework SystemConfiguration -framework AVFoundation -framework CoreGraphics -framework CoreLocation -framework MediaPlayer -framework OpenGLES -force_load /Users/fabian/Library/Developer /Xcode/德里vedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator/libkobold2d-ios.a -force_load /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator/libcocos2d-ios。 a -weak_framework CoreMotion -weak_framework GameKit -weak_framework iAd -weak_framework MessageUI -weak_framework StoreKit -weak_framework UIKit -weak-lSystem -lstdc++ -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=7.1 -框架 AudioToolbox -framework AVFoundation -framework CoreFoundation -framework GameKit -lbox2d-ios -lchipmunk-ios -lchipmunk-spacemanager-ios -lcocos2d-extensions-ios -lcocos2d-ios -lcocos3d-ios -lcocosdenshion-ios -lkobold2d-ios -lobjectal- ios -lsneakyinput-ios -lwax-ios -Xlinker -dependency_info -Xlinker /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Intermediates/OME.build/Debug-iphonesimulator/OME-iOS.build/对象-正常/i386/OME_dependenc y_info.dat -o /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator/OME.app/OME

架构 i386 的未定义符号:
  “___isnan”,引用自:
      -[OALGainAction prepareWithTarget:] 在 libobjectal-ios.a(OALAudioActions.o)
      -[OALPitchAction prepareWithTarget:] 在 libobjectal-ios.a(OALAudioActions.o)
      -[OALPanAction prepareWithTarget:] 在 libobjectal-ios.a(OALAudioActions.o)
ld:未找到体系结构 i386 的符号
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

请漂亮:有人有想法吗?我可能对这里的可能原因了解不够,无法自行进行。 FWIW,libobjectal-ios.a 已被多次删除并重新添加到项目中,但无济于事。

【问题讨论】:

  • 尝试单独构建目标库。检查它的源代码是否使用了 isnan 函数,也许可以用另一种检查代替它(isnan 测试“不是数字”)。升级目标代码应该是独立的,不会造成太多麻烦。通常你会遇到 cocos2d v2 的问题,因为它不能编译(没有错误)到 64 位/armv7s,但 Apple 现在需要在所有应用程序中使用 armv7s 代码。
  • @LearnCocos2D - 该死,我计划在 1 周内发布到应用商店,只有 2.1,32 位。我以为新规则是针对 2 月的。我错了,面临另一个叉车升级到 3.x 吗?
  • 实际上不确定,这是我从某处了解到的,这条新规则可能尚未生效,但只是宣布将在未来某个日期(不是目前)生效跨度>

标签: ios cocos2d-iphone linker kobold2d


【解决方案1】:

感谢@LearnCocos2D'(Steffen)的回复,我想出了如何解决这个问题:

-进入 Kobold2D-Libraries >> ObjectAL >> ObjectAL >> Actions >> OALAudioActions.m

-在OALAudioAuctions.m的源代码中,将出现的3次“isnan”替换为“thisisnan” (在prepareWithTarget中分别出现了3个,OALGainAction、OALPitchAction和OALPanAction)

-然后在第32行之后的顶部插入以下块:

#pragma mark x64 compatibility
#if TARGET_IPHONE_SIMULATOR
#define thisisnan(x)                                                  \
( x != x ? true : false)
#else
#define thisisnan(x)                                                  \
(isnan(x))
#endif

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多