-fno-unwind-tables 和 -fno-asynchronous-unwind-tables 不起作用 NDK clang++
-fno-unwind-tables and -fno-asynchronous-unwind-tables does not work NDK clang++
我正在使用 ndk21 附带的 clang++ 编译我的 C++ 代码。我已经设置了两个编译器标志 -fno-unwind-tables 和 -fno-asynchronous-unwind-tables 但 unwind table 中的条目数不会减少。我还通过设置相反的 -funwind-tables 和 -fasynchronous-unwind-tables 进行了检查,但它也没有增加。设置 -fno-exceptions 确实会稍微减少条目数,这让我觉得我正确地传递了标志。有谁知道为什么会这样?
我的测试程序非常简单,只有 5 个函数,都是将字符串附加到字符串。是unwind中的最小条目数table吗?我正在尝试减小二进制大小。
通常,原因是您依赖于 具有展开表的其他一些库。 C++ stdlib 肯定是用它们构建的,所以如果你使用 libc++_static.a 它们将被添加到你的库中。由于该代码已经编译,您的编译器标志不会对其产生任何影响:)
我还应注意,即使您没有使用异常,也有其他原因可能需要展开表。例如,您使用的崩溃处理程序可能取决于它们。
我正在使用 ndk21 附带的 clang++ 编译我的 C++ 代码。我已经设置了两个编译器标志 -fno-unwind-tables 和 -fno-asynchronous-unwind-tables 但 unwind table 中的条目数不会减少。我还通过设置相反的 -funwind-tables 和 -fasynchronous-unwind-tables 进行了检查,但它也没有增加。设置 -fno-exceptions 确实会稍微减少条目数,这让我觉得我正确地传递了标志。有谁知道为什么会这样?
我的测试程序非常简单,只有 5 个函数,都是将字符串附加到字符串。是unwind中的最小条目数table吗?我正在尝试减小二进制大小。
通常,原因是您依赖于 具有展开表的其他一些库。 C++ stdlib 肯定是用它们构建的,所以如果你使用 libc++_static.a 它们将被添加到你的库中。由于该代码已经编译,您的编译器标志不会对其产生任何影响:)
我还应注意,即使您没有使用异常,也有其他原因可能需要展开表。例如,您使用的崩溃处理程序可能取决于它们。