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.可惜这不是答案。投票结束,谢谢。这很有帮助。