C++ 在linux中,如何判断我';m链接到静态库还是动态库?

C++ 在linux中,如何判断我';m链接到静态库还是动态库?,c++,linux,dynamic,static,C++,Linux,Dynamic,Static,我有一个静态库和一个动态库,它们的名称相同:libclsocket.a和libclsocket.a。因此,当我指定要链接到的库时,只需输入-lclsocket作为库。我的程序符合要求并且运行得很好,但是我使用的是什么库呢?静态库还是动态库?我想把我的程序给我的朋友,但我不确定是否需要在发行版中包含这些库。C++、CeldReSe、pCLinux、2010、 > P>可以在可执行文件上运行 LDD < /Cord>,查看是否伴随。SO在依赖列表中被检测到。 ldd手册页为。如果使用-static标

我有一个静态库和一个动态库,它们的名称相同:libclsocket.a和libclsocket.a。因此,当我指定要链接到的库时,只需输入-lclsocket作为库。我的程序符合要求并且运行得很好,但是我使用的是什么库呢?静态库还是动态库?我想把我的程序给我的朋友,但我不确定是否需要在发行版中包含这些库。C++、CeldReSe、pCLinux、2010、

> P>可以在可执行文件上运行<代码> LDD < /Cord>,查看是否伴随。SO在依赖列表中被检测到。


ldd手册页为。

如果使用
-static
标志,则所有组件都将变为静态。而
-l
可能包括共享库。因此,指定静态库文件名(例如,使用
/usr/lib/libfoo.a
,例如,前面没有
-l
),应该可以获得所需的效果。

它正在链接到共享库。那么我如何链接到静态库呢?我还假设它默认为共享库。在使用GCC构建时,您没有指定
-static
标志,因此很可能您正在链接到共享对象。正如@Soo Wei Tan所回答的,您可以在二进制文件上使用
ldd
来确定其运行时链接器依赖项。我是否可以指定要静态链接的库?您可以通过传递库的全名来选择性地进行静态链接。类似于
gcc-ootfile-l:libclsocket.a
。注意
,它非常重要。我想找到关于这种行为的官方文档,但是
gcc
的手册页没有提到这种用法。@birryrree你说过:非常重要。它还有什么用途?gcc是否自动使用共享库?Is-l:好的做法?如果你不输入冒号,命令就不起作用(对于你正在尝试做的事情)。默认情况下,gcc链接的方式取决于平台。gcc将选项传递给底层链接器(在Linux系统上通常是GNU ld,但在其他平台上可能是其他的,如Windows上的link.exe和Solaris上的Sun ld),链接器完成其工作。默认情况下,在Linux/Windows上,底层链接器将尝试动态链接,因此如果要链接到共享对象,则不必进行全名链接。