C++ 如何知道哪些库动态链接到静态库中?

C++ 如何知道哪些库动态链接到静态库中?,c++,linker,libraries,loader,C++,Linker,Libraries,Loader,假设我有一个libmy.a静态库,我想知道它动态链接了哪些库。事实上,我需要这样做:我将创建一个新的动态库,比如libmy2.so,它将链接一个.o文件(对象文件)和libmy.a。所以我想知道libs最终会加载libmy2.So什么。您可以使用以下命令检查静态库的内容: nm -C libname.a | less 或 在mac上,它将是 nm-mclibname.a静态库不链接其他库,无论是静态库还是动态库 OK,假设两个C++文件,A.CPP和B.CPP.< g++ -c a.cp

假设我有一个libmy.a静态库,我想知道它动态链接了哪些库。事实上,我需要这样做:我将创建一个新的动态库,比如libmy2.so,它将链接一个.o文件(对象文件)和libmy.a。所以我想知道libs最终会加载libmy2.So什么。

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

nm -C libname.a | less  

在mac上,它将是
nm-mclibname.a

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

OK,假设两个C++文件,A.CPP和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选项,这可能会稍微简化流程。坦白地说,除了从对象列表中构建静态库之外,我几乎从未使用过这个命令。

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

特别是,您是否认为我无法构建静态库,而静态库会静态链接其他库?@Narek是-应用程序或共享库可以链接其他静态库或共享库,但静态库不能,因为它们只是对象文件的存档。链接到一个对象文件有什么不对呢。E一个静态库,并获取一个对象文件+1个静态库?@Narek您可以归档(而不是链接)一组对象文件以生成一个静态库。请编写命令,通过将myObject.o文件添加到liba1.a中,从liba1.a生成libb1.a。
ar --help