如上所述,我希望能够检查由libtool创建的共享库是否缺少任何符号,
我写了一个作为共享库构建的库,' A'。它依赖于另一个图书馆' B'
另一个图书馆' B'不遵循严格的semver,因此有时会在次要版本或补丁版本中引入新功能。
虽然我尝试在我的库的代码中放置适当的#if B_LIB_VERSION >= 42
,如果它不可用,则不会尝试调用库B中的函数,显然我有时会得到不正确的版本。这会在程序运行时导致错误。
是否有可能使用libtool或任何其他工具要求它生成一个列表,其中列出了共享库中未找到的所有符号,或者它将加载的任何库?
答案 0 :(得分:0)
如上所述,我希望能够检查由libtool创建的共享库是否缺少任何符号,
共享库很难做到,因为它们旨在允许后期符号解析。如果您不使用dlopen
类型功能,则可以从静态版本的A和B构建静态可执行文件,并查找缺少的符号。
另一个图书馆' B'不遵循严格的semver,因此有时会在次要版本或补丁版本中引入新功能。
我认真考虑寻找替代图书馆,而不是继续处理他们的dependency issues。
是否有可能使用libtool或任何其他工具要求它生成一个列表,其中列出了共享库中未找到的所有符号,或者它将加载的任何库?
不,不是真的。 nm
将为您提供共享库中未定义(和引用)的符号列表。 objdump
也可能有用。在Linux上,ldd
可能会做你想要的一些事情。但通常会有no way of knowing exactly what a shared library loads,即使不考虑dlopen
。
libltdl也可能有用。至少你可以在运行时弄清楚libB.42
是否有符号xyz
。它并不像条件代码处理方式那么容易。