我如何知道哪些库动态链接到静态库?

时间:2011-05-27 06:31:33

标签: c++ linker libraries loader

假设我有一个libmy.a静态库,我想知道它动态链接的库。实际上我需要以下内容:我将创建一个新的动态库,例如libmy2.so,它将链接说.o文件(目标文件)和libmy.a。所以我想知道libs最终会加载libmy2.so。

4 个答案:

答案 0 :(得分:1)

静态库不会链接其他库,无论是静态还是动态。

好的,假设有两个C ++文件,a.cp​​p和b.cpp。

g++ -c a.cpp -o a.o         // compile a.cpp to a.o
rm -f lib1.a                // no existing lib1.a (this is not essential)
ar rvs lib1.a a.o           // create library lib1.a and add a.o to it
g++ -c b.cpp -o b.o         // compile b.cpp to b.o
ar rvs lib1.a b.o           // ad b.o to existing lib1.a

显然,您可以在各个阶段之间进行任意数量的复制,以生成具有所需名称的库。你也可以

ar --help

获取可能会略微简化过程的ar选项。坦率地说,这是一个我几乎从不使用的命令,除了从对象列表构建静态库。

答案 1 :(得分:0)

您可以使用以下命令检查静态库的内容:

nm -C libname.a | less  

$ar -vt libname.a 

答案 2 :(得分:0)

在Mac上,它会是 nm -m C libname.a

答案 3 :(得分:0)

动态库将仅动态链接到您在构建时使用-l指定的动态库。静态库主要链接表示一组* .o文件的时间实体,它们必须由链接器处理以生成可执行代码,因此不需要在构建静态库时必须提供所有实现。全部是在目标可执行文件的最终链接期间设置的。