如何在没有STL的情况下构建Android NDK .so?

发布于 2024-12-06 20:44:06 字数 221 浏览 0 评论 0原文

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

I'm using the newest Android NDK r6b to build my shared object. This library does not use any kind of STL at all, but resulting .so includes many STL stuff like std::bad_alloc_what(void) and many more, which increases size of binary greatly. Also release builds include this garbage. APP_STL not defined anywhere, also the NDK r5b produces small binary with used functions only. Is it a bug of r6b? How can I build with r6b without STL stuff?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

榆西 2024-12-13 20:44:06

NDK r6b 似乎存在一个错误,它总是构建具有异常支持的库,即使显式指定了 -fno-exceptions 也是如此。

有关详细信息,请参阅此问题: Android NDK 生成不合理大的二进制文件,如何优化.so大小?

It seems that there is a bug in NDK r6b and it always builds libraries with exceptions support, even if -fno-exceptions is explicitly specified.

See this question for details: Android NDK produce unreasonable big binaries, how to optimize .so size?

一瞬间的火花 2024-12-13 20:44:06

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

If you are using, say, new then you are implicitly using the standard library for the std::bad_alloc exception. Unless you call the no-throw version of new, which would instead use std::nothrow. If you don't use the standard library, then it won't get linked. Just make sure you don't, if that's what you want, or perhaps just move to C?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文