Memory 链接/构建方言/行话-动态链接方法

Memory 链接/构建方言/行话-动态链接方法,memory,makefile,static-linking,dynamic-linking,Memory,Makefile,Static Linking,Dynamic Linking,我熟悉一般的程序内存布局(即:文本段、数据段、堆、堆栈等),并试图找到与此处的描述和图表类似的内容: 但是,我试图找出三种不同的情况,每种情况都涉及使用外部库: 构建时外部库的静态链接(即ldflags中的libtest.a) 构建时外部库的动态链接(即:libtest.so中的ldflags) 运行时外部库的动态链接(即:libtest.so不是ldflags中的,而是通过dlopen()/dlsym()调用加载库) 能不能请更熟悉这一点的人向我解释一下内存布局?我特别感兴趣的是案例(2)和

我熟悉一般的程序内存布局(即:文本段、数据段、堆、堆栈等),并试图找到与此处的描述和图表类似的内容:

但是,我试图找出三种不同的情况,每种情况都涉及使用外部库:

  • 构建时外部库的静态链接(即
    ldflags
    中的
    libtest.a
  • 构建时外部库的动态链接(即:
    libtest.so
    中的
    ldflags
  • 运行时外部库的动态链接(即:
    libtest.so
    不是
    ldflags
    中的
    ,而是通过
    dlopen()
    /
    dlsym()
    调用加载库)
  • 能不能请更熟悉这一点的人向我解释一下内存布局?我特别感兴趣的是案例
    (2)
    (3)
    之间的区别


    谢谢。

    我发现Solaris链接器指南(at)写得非常好,在解释极其复杂的实用程序时非常有用


    从图表的角度来看,您可能会发现,在中的链接会有所帮助。

    在案例(2)中,链接仍然发生在链接时,而不是构建时。堆栈和堆竞技场将在所有三种情况下共享。在案例(1)中,库的文本和数据部分将与对象文件的文本和数据部分合并。在第(2)和(3)种情况下,每个动态链接的库都有自己的文本和数据部分,这些部分可能会被运行时加载程序重新定位。谢谢+1.可惜这不是答案。投票结束,谢谢。这很有帮助。