【问题标题】:What parts of C++ are / aren't supported with Brew (MP)?Brew (MP) 支持/不支持 C++ 的哪些部分?
【发布时间】:2011-01-05 19:09:54
【问题描述】:

您好,我正在尝试找出在 BrewMP 上使用 C++ 可以实现和不可以实现的功能。

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

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

【问题讨论】:

    标签: c++ brew-framework brewmp


    【解决方案1】:
    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 库或 c 运行时),例如 memsetsprintf。原因:在带有 main() 入口的通用进程模块中,C 运行时的那些在用户代码调用它们之前已经自动初始化。 BrewMP mod (mod1) 文件是动态加载和链接的。没有合适的时间调用初始化,这些MOD不应该单独调用C运行时初始化。

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

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

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

    【讨论】:

    • 从第 2 点开始,您必须使用 提供的 MALLOC() 和 FREE() 重载 operator new 和 delete。
    • 感谢详细的回复,不胜感激。
    【解决方案2】:

    有一些问题:

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

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

    【讨论】:

    • 谢谢。帖子链接机制是什么意思?你能提供任何具体的例子吗?
    猜你喜欢
    • 2016-09-20
    • 1970-01-01
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    相关资源
    最近更新 更多