GCC -fPIC选项

我已经阅读了GCC的代码生成约定选项,但不了解“生成与位置无关的代码(PIC)”的含义。请举一个例子来解释我的意思。


侃侃尔雅
浏览 830回答 3
3回答

德玛西亚99

我将尝试以一种更简单的方式来解释所讲的内容。每当加载共享库时,加载程序(操作系统上的代码会加载您运行的任何程序)都会根据对象的加载位置更改代码中的某些地址。在上面的示例中,非PIC代码中的“ 111”由加载程序在首次加载时写入。对于非共享对象,您可能希望这样,因为编译器可以对该代码进行一些优化。对于共享对象,如果另一个进程想要“链接”到该代码,则他必须将其读取到相同的虚拟地址,否则“ 111”将没有意义。但是该虚拟空间可能已在第二个过程中使用。
打开App,查看更多内容
随时随地看视频慕课网APP