來源:http://blog.csdn.net/linguifa/article/details/25741807ios
本文記錄了在開發 騰訊移動遊戲平臺SDK(MSDK) ios版Ane擴展 過程當中所遇到的問題c++
文中不少問題都是基礎的問題、對object c和xcode配置瞭解不深刻致使的。(沒辦法,開發ane的程序員大部分都是作ActionScript的,通常對c/c++都沒有開發經驗)程序員
問題1、編譯報錯:Unexpected ‘@’ in programobjective-c
代碼以下:
@try{
}
@catch{
}
緣由是高版本xcode代碼放在低版本xcode下跑,低版本ios 不支持這種寫法(ios 7.0編譯正常),須要修改設置ios Deployment Target屬性
若是要支持安裝在低版本的ios上,則不能用這種寫法----待確認??xcode
問題2、c++代碼和object-c混合編譯,會報錯:Cannot use '@try' with Objective-C exceptionsdisabledapp
解決辦法:修改target -> build settings -> All | Combined -> Apple LLVMCompiler 5.0 - Language - Objective C 中 EnableObjective-C Exceptions 爲YESide
問題3、編譯報錯 instance method '-AddList:' not found (returntype defaults to 'id')函數
緣由1:沒有import .h文件,只經過 @class file 方式引用了文件,解決方法是 把文件import進來
例http://blog.csdn.net/liuyuyefz/article/details/8189210ui
緣由2:實例方法和靜態方法搞錯了.net
問題4、項目移植到另外一個版本ide後編譯報錯
Unsupported compiler 'com.apple.compilers.llvmgcc42' selected forarchitecture 'armv7'
Unableto determine concrete GCC compiler for file/Users/flash8/Desktop/app/TencentMSDKAneIOS/TencentMSDKAneIOS/TencentMSDKAneIOS.mof type sourcecode.c.objc.
緣由是xcode版本不一樣,編譯器不同了,解決方法:
設置 Build Settings-> Build Options -> Compiler for C/C++/Objective-C 選擇DefaultComplier (Apple LLVM 5.1)
問題5、打包時報錯:ld: framework not found AdSupport
緣由是platformoptions.xml中未添加在上添加AdSupportframework,注意(低於IOS 6.0系統須要在xcode中設置爲Optional)
<option>-frameworkAdSupport</option>
問題6、打包時報錯:-[GDataXMLElement attributeForName]......一大段
緣由是platformoptions.xml中未添加在上添加libxml2
<option>-lxml2</option>
問題7、打包時報錯:
Undefined symbols for architecture armv7:
"_TencentMSDKAneIOSExtInitializer",referenced from:
_g_com_adobe_air_fre_fmap in extensionglue.o
(maybe you meant:_TencentMSDKAneIOSExtInitializer_name)
"_TencentMSDKAneIOSExtInitializer",referenced from:
_g_com_adobe_air_fre_fmap in extensionglue.o
(maybe you meant:_TencentMSDKAneIOSExtFinalizer_name)
ld:symbol(s) not found for architecture armv7
Compilationfailed while executing : ld64
找了很久,一直懷疑是類庫漏了或配置錯誤,後來發現緣由是 c++把函數名翻譯了(這個項目包含c++代碼)
解決辦法是在頭文件中用extern c把那兩入口函數包住
#if__cplusplus
extern"C" {
#endif
void *TencentMSDKAneIOSExtInitializer();
void *TencentMSDKAneIOSExtInitializer();
#if__cplusplus
} // Extern C
#endif
參考連接:http://stackoverflow.com/questions/7376003/linker-error-using-extern-c-in-objective-c-code
問題八、#import<vector> 編譯時提示錯誤「vector.h file not found」
緣由是項目中引入了C++ STL裏的vector.h文件,編譯器的配置不對,修改以下配置便可:1. 選擇project -> build setting -> apple LLVM compiler 3.0 – language配置項,2. 將Compile Sources As設置項修改成Objective-C++。