2013-06-05 121 views
1

我将一组静态库转换为共享库,并且能够成功创建共享库。问题在于exe文件,因为与静态库的链接可能在库中有未解析的符号,但共享库并不是这种情况。共享库中的所有符号都应该解决。列出Solaris中共享库的依赖关系

例子: PROG1调用了lib1.a调用LIB2.a 现在PROG1的make文件不需要有LIB2.a为PROG1调用了lib1.a不会导致调用LIB2.a。所以一些LIB2.a LIB1.a中的符号可以保持不变。

转换后 两个LIB1.so和LIB2.so都必须包含在PROG1的makefile中。包括LIB2.so解决了LIB1.so的几个联系问题,但是由于包含了LIB2.so而出现了新问题(因为它可能取决于LIB3.so)

有没有什么方法可以找出所有的依赖共享库的库?
我试过使用ldd,但没有打印任何东西。

如果我的分析错误,请让我知道。

+0

LDD没有依赖关系,和错误输出什么都没显示它必须至少依赖于libc。请为您提到的所有三个库添加ldd的输出。 –

+0

红宝石%1!-ltr libStorage.so lrwxrwxrwx 1个苏达dvlpmnt 23年5月20日3时20 libStorage.so - > libStorage.so.1 红宝石%1!-ltr libStorage.so.1 -rwxrwxr-X 1阿西克dvlpmnt 5705636 Jun 6 03:43 libStorage.so.1 ruby​​%ldd libStorage.so ruby​​% – user1758616

回答

0

这是一个稍微个人的意见,但我认为你应该链接你的共享库,以便你得到一个未解决的符号错误(与-z defs)。这意味着您可以独立分类每个图书馆,并且在链接时不会发生任何令人不快的意外。

当然,如果你的库是干净的,不含递归的依赖(这可能是反正坏事)这个只能和你是不是尝试做动态加载在那里你可以加载任何impl_1.soimpl_2.soimpl3_.so在运行时为客户端client.so提供代码。但是,如果您拥有链接时间依赖关系,它就会运行良好。

事实上,如果你不这样做,并且使用ld而不是cc进行链接,,你会得到相当多,你看到的 - 在链接时间