我正在调用一个在汇编中使用以下代码片段开发的外部函数:
extern int myfunction();
除了执行代码之外,为了在程序集中声明一个函数,我使用了:
.section .text
.global myfunction
.type myfunction, @function
这应该告诉编译器程序集文件包含名为myfunction
的外部函数的引用。然后我使用以下命令编译代码:
gcc -m32 -o obj/main.o -c src/main.c
gcc -m32 -o obj/myfunction.o -c src/myfunction.s
gcc -o bin/myfunction obj/main.o obj/myfunction.o -m32
当我使用GCC 10进行编译时,会显示一个警告:
/usr/bin/ld: warning: relocation in read-only section `.text'
/usr/bin/ld: warning: creating DT_TEXTREL in a PIE
我该如何抑制该警告?
将标志--no-pie
添加到构建命令中。这指定编译器不生成PIE(位置独立可执行文件(文件。PIE通常用于共享库,因此可以在每个程序地址空间中的某个位置加载相同的库代码,该位置不会与正在使用的其他内存(例如,其他共享库(重叠。