我有一個包含objective-c靜態庫的monotouch應用程序。應用程序在模擬器上正確運行,但是當我嘗試在iPhone 3GS上運行應用程序時,它在啓動時崩潰。這些是我已嘗試得到它的工作步驟:靜態庫應用程序在模擬器上運行,但不在實際設備上運行
- 編譯在Xcode靜態庫設備規定和有源體系在ARMv6的集和ARMv7的(我不知道這是正確的,但我試了兩次,都沒有工作)。
- 在項目信息下,我將代碼簽名標識設置爲我的開發人員密鑰。 :在MonoDevelop中我已經通過設置額外的MonoTouch參數下iPhone打造有以下值(這等同於什麼設置爲iPhoneSimulator)包含在應用項目選擇靜態庫
-v -v -v -gcc_flags 「-lstdC++ -I $ {PROJECTDIR} /的UltraLite /包含-L $ {PROJECTDIR} /的UltraLite -lUltralite -force_load $ {PROJECTDIR} /Ultralite/libUltralite.a」
當我嘗試運行應用程序時,它在啓動時崩潰(s o應用程序屏幕甚至不出現)。在MonoDevelop的一切,我看到的是下面的異常消息:
Exception of type 'Mono.Debugger.Soft.VMDisconnectedException' was thrown.
所有我的設備日誌Xcode中看到如下:
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x2fd00f24
如果我刪除從項目中-gcc_flags選項選項,然後應用程序啓動,但在第一次嘗試訪問靜態庫時崩潰。所以這肯定是與靜態庫有關,導致應用程序在啓動時崩潰。
我不知道從哪裏開始解決這個問題,所以真的需要一些幫助。任何人都會對我所包含的靜態庫有什麼問題有任何想法,或者知道哪裏可以獲得有關錯誤的更多信息?崩潰報告中的KERN_PROTECTION_FAILURE消息確實沒有給我太多的幫助。
更新: 我創建了一個按鍵,點擊它時調用靜態庫的方法的sayHello一個簡單的Hello World應用程序。即使有這個基本的例子,我也遇到了同樣的問題。即它在模擬器上運行,但不在實際設備上運行。我已經將我的helloworld示例上傳到github。如果有人能幫助我完成這項工作,我將不勝感激。這裏是世界您好樣本:
https://github.com/BruceHill/HelloWorld
這包括基本的應用程序文件夾,用Objective-C的靜態庫文件夾,然後終於在btouch定義的文件夾。我用參數-outdir =調用btouch。構建Messaging.g.cs和UltraliteManager.g.cs然後將其包含在MonoTouch應用程序中。
精華:0主題名稱:調度隊列:com.apple.main線程 螺紋0墜毀: 0 Mobileforms \t 0x00fc0c1c mono_aot_get_class_from_name(AOT-runtime.c:1497) 1 Mobileforms \t 0x010225b0 mono_class_from_name( class.c:7092) 2 Mobileforms \t 0x0103ce80 mono_exception_from_name_domain(exception.c:58) 3 Mobileforms \t 0x0103ce38 mono_exception_from_name(exception.c:35) 4 Mobileforms \t 0x0103d418 mono_get_exception_null_reference(exception.c:280) – BruceHill 2011-05-09 09:40:59
我現在一個是更接近解決這個問題。我已經設法通過修改_Don't link_到_Link SDK程序集only_的構建選項中的_Linker行爲_設置來實現我的_Hello World_示例。但是,當我在實際應用程序中進行此更改時,出現錯誤「mtouch failed with no output」,並在構建日誌下看到鏈接器錯誤,指出符號未定義。例如,它說libUltralite.a中的「_SecRandomCopyBytes」和「_SecKeyGetBlockSize」是未定義的。 – BruceHill 2011-05-10 08:38:03