【发布时间】:2015-08-06 05:29:21
【问题描述】:
我file /bin/ls 并得到输出:
/bin/ls:ELF 64 位 LSB 共享对象,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,用于 GNU/Linux 2.6 .32,剥离
我发现原因是我的 gentoo 正在使用 -pie 编译所有内容。
如果我将 -nopie 传递给 gcc,我将得到正确答案:
a.out:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,适用于 GNU/Linux 2.6.32 , 不剥离
另外,我在building a .so that is also an executable 找到了一些东西。它使用 -pie 使 DSO 可执行。
在 gcc 的手册页中,简要描述了:
-馅饼
在支持它的目标上生成与位置无关的可执行文件。
所以我想知道 -pie 到底是做什么的?它如何使我的可执行文件被识别为共享对象?
【问题讨论】:
标签: c linux gcc linker code-generation