2014-11-13 60 views
0

試圖更新Yosemite上iOS 8.1/XCode 6的Kobold2D/Cocos2d 2.1項目。如何解決XCode 6/Kobold2D(鏈接程序錯誤)的OALAudio庫

在使用此處提供的解決方案(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 
    export IPHONEOS_DEPLOYMENT_TARGET=7.1 
    export 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/DerivedData/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 -framework 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/Objects-normal/i386/OME_dependency_info.dat -o /Users/fabian/Library/Developer/Xcode/DerivedData/OME-abspfkzbpimdpqaoclhujzvtfred/Build/Products/Debug-iphonesimulator/OME.app/OME 

Undefined symbols for architecture i386: 
    "___isnan", referenced from: 
     -[OALGainAction prepareWithTarget:] in libobjectal-ios.a(OALAudioActions.o) 
     -[OALPitchAction prepareWithTarget:] in libobjectal-ios.a(OALAudioActions.o) 
     -[OALPanAction prepareWithTarget:] in libobjectal-ios.a(OALAudioActions.o) 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation)

請拜託:沒有任何人有一個想法?我可能對這裏可能的原因不夠了解,無法自行進行。 FWIW,libobjectal-ios.a已被刪除並重復添加到項目中,無濟於事。

+0

嘗試單獨構建對象庫。檢查它的源代碼是否有任何isnan函數的使用,也許它可以替換爲一個替代檢查(isnan測試「不是一個數字」)。升級目標代碼應該是孤立可行的,不會造成太大麻煩。一般來說,你會遇到cocos2d v2的問題,因爲它不能編譯(沒有bug)到64位/ armv7s,但是Apple現在需要所有應用程序中的armv7s代碼。 – LearnCocos2D

+0

@ LearnCocos2D - darn,我打算在1周內發佈到應用商店,只有2.1,32位。我認爲新規則是在二月份。我錯了,面臨另一個叉車升級到3.x? – YvesLeBorg

+0

實際上並不確定,這是我在某個地方找到的東西,有可能這個新規則還沒有生效,但只是宣佈在未來的日期(不是很遠)生效 – LearnCocos2D

回答

0

感謝@ LearnCocos2D」(斯蒂芬的)反應,我想通了,如何解決這一問題:

- 依序爲Kobold2D - 庫>> ObjectAL >> ObjectAL >>行動>> OALAudioActions.m

-In OALAudioAuctions.m的源代碼,以 「thisisnan」 (有3個事件,分別OALGainAction,OALPitchAction和OALPanAction,在prepareWithTarget)

- 然後插入以下更換3次出現 「isnan」 的在林後阻止頂部e 32:

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