【问题标题】:How to build Android NDK .so without STL?如何在没有 STL 的情况下构建 Android NDK .so?
【发布时间】:2011-09-24 19:46:39
【问题描述】:

我正在使用最新的 Android NDK r6b 来构建我的共享对象。该库根本不使用任何类型的 STL,但生成的 .so 包含许多 STL 内容,例如 std::bad_alloc_what(void) 等等,这大大增加了二进制文件的大小。发布版本也包括这个垃圾。 APP_STL 没有在任何地方定义,NDK r5b 也只生成带有使用函数的小二进制文件。这是r6b的错误吗?如何在没有 STL 的情况下使用 r6b 构建?

【问题讨论】:

标签: android stl android-ndk


【解决方案1】:

NDK r6b 中似乎有一个错误,它总是构建具有异常支持的库,即使明确指定了-fno-exceptions

详情请看这个问题:Android NDK produce unreasonable big binaries, how to optimize .so size?

【讨论】:

  • 我猜,你是对的。看来,我应该继续使用“旧”r5 NDK。 Спасибо.
【解决方案2】:

如果您正在使用new,那么您就是在隐式使用标准库来处理std::bad_alloc 异常。除非您调用new 的无抛出版本,否则它将使用std::nothrow。如果您不使用标准库,那么它将不会被链接。只要确保你不这样做,如果这是你想要的,或者只是转移到 C?

【讨论】:

  • 我确定我不会在任何地方使用 STL,因为正如我所说,r5b 构建库时没有任何 STL 参考。
  • @trashkalmar:所以你甚至没有在整个代码中直接或间接使用new? r6b 是否有机会在启用异常的情况下构建而 r5b 没有?
  • 当然,我多次使用new。如何确定 r6b 是否打开异常?以及如何明确禁用它们?据我所知,Android 运行时不支持 C++ 代码中的异常。
  • 好吧,std::bad_allocnew 内存不足时抛出的异常。检查“--no-exceptions”标志或类似标志。
  • 没有任何改变。我认为它是 r6b 中的一个错误。无论如何,谢谢你的回答。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-20
  • 2012-03-18
  • 2012-08-21
  • 2015-09-22
  • 2020-03-18
相关资源
最近更新 更多