GCC中可执行文件的非GOT样式重定位

问题描述 投票:1回答:1

在GCC中,如果我使用g++ -shared func.cpp -o libfunc.so -fPIC将某些内容编译到带有GCC的共享库中,则对此全局符号的内部函数调用将在此生成的共享库文件中通过GOT。但是如果我使用g++ func.cpp -o libfunc.so -mcmodel=large进行编译,它将不会生成GOT,而是通过直接使用R_X86_64_64样式重定位来重新定位。

我也希望这种行为可执行文件。如果我使用g++ main.cpp libfunc.so -o a.out编译可执行文件,GCC将为从main.cpplibfunc.so中定义的函数调用生成GOT。我不想要这种行为。我想要R_X86_64_64风格的搬迁。我怎样才能做到这一点?

gcc linker
1个回答
0
投票

出于安全原因,默认情况下在现代发行版中使用-fPIE编译可执行文件。要获得旧的行为,请将-no-pie添加到CFLAGS / CXXFLAGS

© www.soinside.com 2019 - 2024. All rights reserved.