gcc 6.4.0如何在x86_64上生成EXEC二进制文件?

时间:2018-02-24 23:30:38

标签: gcc

a.c视为包含:

void _start(void);
void _start(void) { while (1); }

gcc 5.4.0上使用Ubuntu,以下命令会生成类型为ELF且没有外部依赖关系的EXEC文件:

gcc -o ./a -x c ./a.c -nostartfiles -nostdlib -nodefaultlibs

但是,gcc 6.4.0Gentoo的相同命令会生成ELF文件,其类型为DYN,请求标准程序解释程序/lib64/ld-linux-x86-64.so.2

那么,如何使用EXEC生成真正的独立gcc 6.4.0二进制文件?

2 个答案:

答案 0 :(得分:0)

找到它。必须指定-no-pie

答案 1 :(得分:0)

您需要构建非PIE模式以创建与位置相关的可执行文件。这包括两个步骤:

  • -fno-pie汇总。
  • -no-pie
  • 的关联

将编译为PIE的代码链接到与位置相关的可执行文件可以正常工作,但会导致性能下降和更大的可执行文件。