C++ 我们可以将编译后的静态库动态链接吗

C++ 我们可以将编译后的静态库动态链接吗,c++,C++,demo_lib.h 虚无乐趣() demo_lib.cpp #include<iostream> void fun(){ std::cout << "I am in demo_lib::fun()" << std::endl; } main.c #include "demo_lib.h" int main(){ fun(); return 0; } 编译静态 g++ -static main.cpp -L. -ldemo_lib

demo_lib.h 虚无乐趣()

demo_lib.cpp

#include<iostream>
void fun(){
    std::cout << "I am in demo_lib::fun()" << std::endl;
}
main.c

#include "demo_lib.h"
int main(){
    fun();
    return 0;
}
编译静态

g++ -static main.cpp -L. -ldemo_lib
size of a.out is 1702697 => static linked by linker 
无静态编译

g++ main.cpp -L. -ldemo_lib
size of a.out is 9247  => is demo_lib linked dynamically  ??
为什么这里的大小不同

我认为当我们使用-static编译器选项时,cpp库是静态链接的

当我们不使用时,cpp库是动态链接的,除了demo_库

在这两种情况下,demo_lib都是静态链接的,只有cpp library diff

我们可以将静态编译库链接为动态库吗


这是否意味着标准库的默认链接是共享的??

< p>在代码> >静态< /代码>之间的大小差异不是C和C++标准库函数是不链接的。因此,大小差异不是来自您的库(大概只有几百个字节,因为它只是调用< Cux>CUT::运算符< P> >在<>代码>静态< /COD>之间的大小差异,而不是C和C++标准库函数是不链接的。因此,大小差异不是来自库。(这大概只有几百个字节,考虑到它只是对
cout::operator的几个调用,在优秀的Mats-peterson答案之上,有一个很好的工具可以检查动态链接了多少库,只需键入

> ldd a.out

输出将包含你的应用程序链接到的所有共享库

在优秀的Mats-Peterson答案的基础上,有一个很好的工具来检查动态链接了多少库,只需键入

> ldd a.out

输出将包含你的应用程序链接到的所有共享库

可能重复的我不同意这是一个好的复制,这个问题是关于为什么可执行文件的大小与不同的库形式相同。可能重复的我不同意这是一个好的复制,这个问题是关于为什么可执行文件的大小与它的大小相同不同的图书馆形式。
> ldd a.out