我的项目由几个静态库组成,它们在最后一步中链接在一起。现在我遇到了问题,库的链接顺序很重要(否则我会收到未定义的符号链接器错误)。有时我会遇到问题,我必须重新排序链接库(-lcommon -lsetup -lcontrol 等)。目前这是一个愚蠢的试验和错误:重新排序、编译、检查错误、重新排序、编译等等。
因此,我编写了一个小程序来向我展示库间依赖关系并生成要链接的库的顺序。它从nm中读取已定义的('T'、'B' 等)和未定义的符号('U'),并从'未定义的符号列表'。现在它为每个未定义的符号确定解析它的库。
但是我的程序向我展示了循环依赖......我的错误是什么?
如果它们真的存在,我根本无法链接......那么在分析 nm 输出时我错过了什么?还是分析 nm 输出不是获取这些依赖项的方法?
libcommon.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
libhardware.a:
00000484 T _ZN15HardwareUnit23GetHardwareSerialNumberEv
libsecurityaccess.a:
U _ZN15HardwareUnit23GetHardwareSerialNumberEv
---
libhardware.a:
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
libsecurityaccess.a:
00004020 T _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString
U _ZN21ApplicationProfile26GetApplicationSettingsPathERK7QString