Brew(MP)不支持C ++的哪些部分?

时间:2011-01-05 19:09:55

标签: c++ brew-framework brewmp

您好我正在尝试使用BrewMP上的C ++找出什么是可能的,哪些是不可能的。

有没有人有使用C ++和Brew的第一手经验,特别是BrewMP,并且可以说他们是否设法让这些东西在设备上运行而没有太多麻烦:

  • 静态变量/函数
  • 模板
  • 例外
  • 铸造 等

2 个答案:

答案 0 :(得分:2)

  1. 在Brew3.X之前,不支持全局变量和静态变量。但是在Brew MP中,有一个ELF2MOD工具。有了这个,您可以使用全局和静态变量。
    查看您的SDK路径,例如:
    C:\ Program Files \ Qualcomm \ Brew MP SDK \ Toolset 7.10 Rev 10.0.1489821 \ bin

    如果您的全局或静态数据是非POD(C ++对象,必须调用C ++类构造函数),请不要使用它。看到 https://developer.brewmp.com/forum/using-static-variables-classes-0

  2. BrewMP中绝对禁止使用标准C库(stdc lib或c运行时),例如 memset sprintf 。原因:在带有main()条目的通用流程模块中,C运行库的那些已经在用户代码调用它们之前自动初始化。 BrewMP mod(mod1)文件是动态加载和链接的。没有合适的时间来调用初始化,这些MOD不应单独调用C运行时初始化。

  3. C ++模板函数和模板类:模板代码实例化是在编译时生成的,它们不需要任何加载时和运行时代码初始化。它们可以在设备中安全使用。

  4. C ++异常:我没有测试过它。在默认的ARM编译器选项中,未启用异常。例外需要启用C ++ RTTI。

  5. C ++强制转换:dynamic_cast是一个大问题,因为它需要支持运行时类型识别,并在运行时进行类型检查。其他强制转换,例如static_cast,reinterpret_cast和const_cast,只是编译器在编译时检查的提示。

答案 1 :(得分:1)

有一些问题:

  • 虚拟或抽象方法
  • 静态和全局变量支持
  • 全局静态初始化 对象

大多数都可以使用自定义post-linker来解决。它对我来说很好,希望它也适合你。