c - Assembly 中的外部函数声明产生警告

标签 c assembly

我正在调用一个使用以下代码片段在汇编中开发的外部函数:

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 通常用于共享库,因此可以将相同的库代码加载到每个程序地址空间中的某个位置,该位置不会与正在使用的其他内存(例如,其他共享库)重叠。

关于c - Assembly 中的外部函数声明产生警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68128327/

相关文章:

c++ - C++函数重载的汇编等效项是什么?

objective-c - 我怎样才能在 Objective-C 中实现这一点?为没有 API 的网络应用程序开发应用程序,如何让用户登录?

c - RGB颜色转换成5 :6:5 format

c - WSAAsyncSelect/Event 上的 FD_WRITE 处理?

c - 当有多个 fork 进程在运行时,我无法理解流程

C 随机数组中的最大值,无法正常工作

assembly - 为什么有些 8051 程序以代码 "LOOP: SJMP LOOP"结尾

c - 如何编写 Makefile 将 C 代码与 Arm 汇编代码链接?

assembly - 在 Linux 上以汇编形式输出整数

c - gcc -O3 删除 int-to-string 转换器中的实时代码