2012-05-20 129 views
0

我剛剛發現了MoSync SDK,我認爲它是C++程序員使用相同源代碼生成iOS & Android應用程序的非常好的選擇。對於C++程序員來說,MAUI API非常容易學習。 我在iPhone模擬器上測試了一個提供的例子,它工作得很好。但是當查看xcodeproject文件時,找到了一個看起來像彙編代碼的C++源文件。我搜索了關於編譯過程的信息,看起來原來的C++代碼被翻譯成IL語言,IL語言被轉換成C++代碼。MoSync與外部庫鏈接

有沒有人對這個過程的性能問題有任何想法。生成的代碼是否有效?

我想用一些UI調用一個簡單的iOS蘋果,在靜態庫中調用我的C++代碼。所以我做了該出口一個功能的靜態庫(libmylib.a添加):

extern "C" double tst_function(double x) 
{ 
    return sin(x)+2.5; 
} 

然後我從MoSync HelloNativeUI例如內部調用tst_function,並添加libmylib.a添加在MoSync IDE鏈接標誌。但我得到了在編譯過程中出現錯誤:

>>pipe-tool libmylib.a -appcode=KOOU -stabs=stabs.tab ..... 

failed to load '-appcode=KOOU' 

我想也libmylib.a添加添加到剛過mastdD.lib,MAUtilD.lib,NativeUI.lib額外的庫,但我得到這個錯誤信息:

那麼如何告訴MoSync IDE調用位於靜態庫中的外部函數呢?

pipe-tool Copyright 2007-2009 Mobile Sorcery AB 
pass 1. 97 known symbols. 
/Users/mosyncbuilder/slave/buildScripts/temp_j4DF/source/libs/NativeUI/ActivityIndicator.cpp:58: Error: Illegal instruction '!<arch>', 

那麼如何告訴IDE MoSync有關從外部靜態庫調用函數?

親切的問候,

回答

0

管道工具將只接受MoSync IL,但你想給它ARM代碼。這是行不通的。

但是,可能有一種可能的解決方法。你可以創建一個存根庫,用你的程序進行編譯,然後從生成的C++代碼中移除它,並用適當的版本替換它。

+0

謝謝你替換存根庫的想法。但你認爲它會起作用嗎?由mosync爲函數'double tst_func(double x)'生成的ARM代碼將是'int tst_func(int i0,int i1)'。 Xcode生成的ARM代碼是否與mosync代碼相同? – Yazou