gpt4 book ai didi

c - 在 Solaris 中列出共享库的依赖项

转载 作者:太空宇宙 更新时间:2023-11-04 03:55:18 25 4
gpt4 key购买 nike

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

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

最佳答案

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

当然,这仅在您的库是干净的并且不包含递归依赖项(无论如何这可能是一件坏事)并且您不尝试进行动态加载时才有效,您可以加载任何 impl_1 .soimpl_2.soimpl3_.so 在运行时为客户端 client.so 提供代码。但如果您只有链接时间依赖性,它会很好地工作。

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

关于c - 在 Solaris 中列出共享库的依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16945029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com