【问题标题】:Using libc++ instead of libstdc++ in an Adobe Flex native extension在 Adob​​e Flex 本机扩展中使用 libc++ 而不是 libstdc++
【发布时间】:2012-10-12 11:02:18
【问题描述】:

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

但是,用于构建 ANE 的 adt Adob​​e 工具现在会失败,并且没有有用的错误消息(不要以 Adob​​e 工具的质量开头)。 Unix 进程的一些诡计让我们发现adt 调用了操作系统链接器ld。复制相同的 ld 调用让我们发现链接器抱怨一大堆未定义的符号,所有(或者可能大部分)都是标准 C++ 库符号。

确实,ld 调用使用作为参数 -lstdc++ 引用旧库。我想使用 libc++ 意味着 lc++ 参数。但是,由于(显然)不相关的目录问题,尝试修改 ld 失败。

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

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

【问题讨论】:

    标签: c++ apache-flex xcode4 standard-library air-native-extension


    【解决方案1】:

    在 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>
    

    你的构建命令应该是这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多