c++ - 在 Adob​​e Flex native 扩展中使用 libc++ 而不是 libstdc++

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

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

但是,构建 ANE 的 adt Adob​​e 工具现在失败了,没有任何有用的错误消息(不要让我开始谈论 Adob​​e 工具的质量)。 Unix 进程的一些技巧让我们发现 adt 调用操作系统链接器 ld。复制相同的 ld 调用让我们发现链接器提示大量 undefined symbol ,所有(或可能大部分)都是标准 C++ 库符号。

事实上,ld 调用使用了参数 -lstdc++,它引用了遗留库。我想使用 libc++ 将暗示 lc++ 参数。但是,由于(显然)不相关的目录问题,尝试这样修改的 ld 失败了。

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

欢迎任何建议。这是使用 Xcode 4.5.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

关于c++ - 在 Adob​​e Flex native 扩展中使用 libc++ 而不是 libstdc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857655/

相关文章:

mysql - 将预先存在的 Flex/Java/Hibernate/MySQL 应用程序迁移到可移植发行版的 CD 上的最佳途径?

flash - 如何在图像组件之后放置标签?

C++ - 返回不同的变量类型

apache-flex - 如何使Flex文本控件自动换行

c++ - cuda统一内存泄漏

xcode - 调用 UIImagePicker ViewController 时状态栏返回?

import - xcode4 工作区中的两个项目(#import 失败)

iphone - 在应用程序中的越狱设备上安装应用程序

c++ - 如何定义创建前一个对象的默认构造函数

c++ - GDI+ 绘制成束的字母