我们有一个相当大的 c++ 库,我们打包在一个 Adobe Flex 扩展中供我们的 Flex 用户使用。我们将该 ANE 打包用于多个平台,包括 Mac OS 和 iOS。在 Mac 上,当我们使用遗留标准 C++ 库 (libstdc++
) 构建时,一切都很好。当然,我们不想继续使用过时且即将不受支持的库,因此我们切换到当前的 libc++
。库(.a 文件)以这种方式构建良好,调用该库的 native iOS 应用程序也是如此。
但是,构建 ANE 的 adt
Adobe 工具现在失败了,没有任何有用的错误消息(不要让我开始谈论 Adobe 工具的质量)。 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++ - 在 Adobe Flex native 扩展中使用 libc++ 而不是 libstdc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857655/