在C++代码中引用-llog后,生成的库的大小显着增加

问题描述 投票:0回答:1

我使用 NDK 将 C++ 代码编译成动态库。最初,我的代码与 log4 动态库链接,并使用 -llog 包含 Android 日志记录库。不过,后来我删除了对 log4 的代码引用,只保留了 -llog。令人惊讶的是,与之前的构建相比,我的动态库的大小显着增加,并且引入了许多与 itanium_demangle 相关的符号。为什么会发生这种事?

-Os 命令没有任何效果,正如使用 nm 命令时所观察到的,这表明存在大量 itanium_demangle 符号。使用 size 命令分析大小显示 debuginfo 数据显着增加。

linker android-ndk c++17 shared-libraries log4cxx
1个回答
0
投票

为什么会发生这种事?

(可能)因为这些符号以前是由

log4
共享库提供的,但现在仍未解析,因此从
libc++.a
(或您正在使用的任何 C++ 库)中拉入。

您可以使用链接线上的 -Wl,-y,__cxa_demange

查看
引用符号的位置以及定义符号的位置。将此命令与旧设置和新设置一起使用,您应该会看到差异。

您还应该阅读这篇post以了解链接器如何与存档库一起使用。

© www.soinside.com 2019 - 2024. All rights reserved.