列出Solaris中共享库的依赖关系

时间:2013-06-05 16:21:56

标签: c shared-libraries

我正在将一组静态库转换为共享库,并且能够成功创建共享库。问题在于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,但它什么都没打印。

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

1 个答案:

答案 0 :(得分:0)

这是一个略微个人的意见,但我认为您应该链接您的共享库,以便您获得未解析符号的错误(使用-z defs)。这意味着您可以独立地对每个库进行整理,并且在链接时不会产生任何令人讨厌的意外。

当然,这只适用于你的库是干净的并且不包含递归依赖项(这可能是一件坏事)并且你不想尝试动态加载,你可以加载任何{{1} },impl_1.soimpl_2.so在运行时为客户端impl3_.so提供代码。但是如果你所拥有的只是链接时间依赖性,它就能很好地工作。

事实上,如果你不这样做,并且正在使用client.so而不是ld进行链接,你将会得到你所看到的 - 没有依赖关系,以及链接时的错误