1

我正在将一组静态库转换为共享库,并且能够成功创建共享库。问题在于 exe,因为与静态库的链接可能在库中有未解析的符号,但共享库并非如此。共享库中的所有符号都应该得到解析。

示例:PROG1 调用 LIB1.a 调用 LIB2.a 现在 PROG1 的 make 文件不需要 LIB2.a,因为 PROG1 调用 LIB1.a 不会导致调用 LIB2.a。所以 LIB1.a 中的一些 LIB2.a 符号可以仍未解决。

转换后 LIB1.so 和 LIB2.so 都必须包含在 PROG1 的 makefile 中。包含 LIB2.so 解决了 LIB1.so 的一些链接问题,但由于包含 LIB2.so 出现了新问题(因为它可能取决于 LIB3.so)

那么有没有办法找出共享库的所有依赖库?
我尝试使用 ldd 但它什么也没打印。

如果我的分析有误,请告诉我。

4

1 回答 1

1

这是个人观点,但我认为您应该链接您的共享库,以便您收到未解析符号的错误(带有-z defs)。这意味着您可以独立整理每个库,并且在链接时不会遇到任何令人讨厌的意外。

当然,这只适用于你的库是干净的并且不包含递归依赖项(无论如何这可能是一件坏事)并且你没有尝试在可以加载任何的地方进行动态加载impl_1.soimpl_2.so或者impl3_.so为运行时的客户端client.so。但是,如果您所拥有的只是链接时间依赖关系,那么它会很好地工作。

确实,如果您不这样做,并且使用ld而不是cc进行链接,您将得到几乎您所看到的 - 没有依赖关系,并且链接时出现错误

于 2013-06-05T16:42:26.890 回答