我使用 NDK 将 C++ 代码编译成动态库。最初,我的代码与 log4 动态库链接,并使用 -llog 包含 Android 日志记录库。不过,后来我删除了对 log4 的代码引用,只保留了 -llog。令人惊讶的是,与之前的构建相比,我的动态库的大小显着增加,并且引入了许多与 itanium_demangle 相关的符号。为什么会发生这种事?
-Os 命令没有任何效果,正如使用 nm 命令时所观察到的,这表明存在大量 itanium_demangle 符号。使用 size 命令分析大小显示 debuginfo 数据显着增加。
为什么会发生这种事?
(可能)因为这些符号以前是由
log4
共享库提供的,但现在仍未解析,因此从 libc++.a
(或您正在使用的任何 C++ 库)中拉入。
您可以使用链接线上的 -Wl,-y,__cxa_demange
查看引用符号的位置以及定义符号的位置。将此命令与旧设置和新设置一起使用,您应该会看到差异。
您还应该阅读这篇post以了解链接器如何与存档库一起使用。