1

我们有一个相当大的 c++ 库,我们将其打包在一个 Adob​​e Flex 扩展中,供我们的 Flex 用户使用。我们为多个平台打包了该 ANE,包括 Mac OS 和 iOS。在 Mac 上,当我们使用传统的标准 C++ 库 ( libstdc++) 构建时,一切都很好。当然,我们不想停留在一个过时的即将不受支持的库中,我们切换到当前的libc++. 该库(.a 文件)以这种方式构建得很好,调用该库的本机 iOS 应用程序也是如此。

但是,adt构建 ANE 的 Adob​​e 工具现在失败,没有有用的错误消息(不要让我开始关注 Adob​​e 工具的质量)。Unix 进程的一些诡计让我们找出adt调用 OS 链接器的方法ld。复制相同的ld调用让我们发现链接器抱怨大量未定义的符号,所有(或可能大多数)都是标准 C++ 库符号。

实际上,该ld调用用作-lstdc++引用遗留库的参数。我想使用 libc++ 会暗示这个lc++论点。ld但是,由于(显然)不相关的目录问题,尝试进行此类修改失败。

那么有没有办法告诉adt我们的 .a 库使用当前的标准 C++ 库而不是旧的库?该限制是否有任何明智的解决方法adt?更一般地说,有没有办法说服adt(以及一般的 Flex Builder)不要拦截和吃掉工具错误消息?

欢迎任何建议。这是使用 Xcode 4.5.1。

4

1 回答 1

0

platformoptions.xmliPhone-ARM 目标的文件中,尝试添加该-lc++选项。即,一个最小的platformoptions.xml文件看起来像这样:

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

您的构建命令将是这样的:

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

于 2013-03-11T23:34:21.373 回答