Linux下GCC/G++编译出来的可执行程序无法双击运行

  • Post author:
  • Post category:linux


查看可执行文件,发现文件属性是shared library,而不是executable,导致这种情况的原因就是g++默认使用了-fpie参数。

什么是pie?

PIE(position-independent executable)是一种生成地址无关可执行程序的技术。如果编译器在生成可执行程序的过程中使用了PIE,那么当可执行程序被加载到内存中时其加载地址存在不可预知性。

PIE还有个孪生兄弟PIC(position-independent code)。其作用和PIE相同,都是使被编译后的程序能够随机的加载到某个内存地址。区别在于PIC是在生成动态链接库时使用(Linux中的so),PIE是在生成可执行文件时使用。

为了让链接生成的文件类型修改成executable,就需要添加编译选项 -no-pie



版权声明:本文为wangw8507原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。