2012-10-12 49 views
1

我們有一個相當大的C++庫,我們打包在Adobe Flex擴展中供Flex用戶使用。我們將該ANE包裝在多個平臺上,包括Mac OS和iOS。在Mac上,當我們使用傳統標準C++庫(libstdc++)構建時,一切都很好。當然,我們不想留在過時的不受支持的庫中,我們切換到當前的libc++。庫(.a文件)的構建方式很好,調用該庫的本地iOS應用程序也是如此。在Adobe Flex本機擴展中使用libC++而不是libstdC++

但是,adt構建ANE的Adobe工具現在會失敗,並且沒有有用的錯誤消息(不要以Adobe工具質量開頭)。 Unix流程的一些欺騙讓我們發現adt稱爲操作系統鏈接器ld。複製相同的ld調用,讓我們發現鏈接器抱怨未定義符號的一大堆,所有(或者大多數)符號都是標準C++庫符號。

事實上,ld調用使用作爲引用舊式庫的參數-lstdc++。我想使用libC++會暗示lc++參數。然而,嘗試這樣修改的ld由於(顯然)不相關的目錄問題而失敗。

那麼有沒有辦法告訴adt我們的.a庫使用當前的標準C++庫而不是傳統的庫?有沒有什麼明智的解決方法可以解決adt限制?更一般地說,有沒有一種方法可以說服adt(以及一般的Flex Builder)不會攔截並使用工具錯誤消息?

任何建議歡迎。這是使用Xcode 4.5.1。

回答

0

在針對iPhone-ARM目標的platformoptions.xml文件中,請嘗試添加-lc++選項。即,最小platformoptions.xml文件應該是這樣的:

<platform xmlns="http://ns.adobe.com/air/extension/3.1"> 
    <sdkVersion>4.0.0</sdkVersion> 
    <linkerOptions> 
     <option>-lc++</option> 
    </linkerOptions> 
</platform> 

你的build命令將是這樣的:

adt -package -target ane Output.ane extension.xml -swc anelib.swc -platform iPhone-ARM -C ios . -platformoptions platformoptions.xml

相關問題