2012-10-12 53 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

相关问题