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

GCC中可执行文件的非GET样式重定位,gcc,linker,Gcc,Linker,在GCC中,如果我使用GCC和g++-shared func.cpp-o libfunc.so-fPIC,将某个东西编译到一个共享库中,则对全局符号的内部函数调用将通过生成的共享库文件中的get进行。但是,如果我使用g++func.cpp-o libfunc.so-mcmodel=large编译,它将不会生成GOT,而是直接使用R\u X86\u 64\u 64样式的重定位进行修补来重定位 我也希望可执行文件有这种行为。如果我用g++main.cpp libfunc.so-o a.out编译一个

在GCC中,如果我使用GCC和
g++-shared func.cpp-o libfunc.so-fPIC
,将某个东西编译到一个共享库中,则对全局符号的内部函数调用将通过生成的共享库文件中的get进行。但是,如果我使用
g++func.cpp-o libfunc.so-mcmodel=large
编译,它将不会生成GOT,而是直接使用
R\u X86\u 64\u 64
样式的重定位进行修补来重定位


我也希望可执行文件有这种行为。如果我用
g++main.cpp libfunc.so-o a.out
编译一个可执行文件,GCC将为从
main.cpp
libfunc.so
中定义的任何函数调用生成GOT。我不想要这种行为。我想要
R_X86_64_64
风格的重新定位。如何实现这一点?

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