C 原型(prototype)函数 - 目标文件

标签 c linux elf object-files symbol-table

在 Linux 中编译 c 源文件时如何处理原型(prototype)函数?符号是存储在目标文件中(格式为ELF文件)还是存储签名以在链接时引用它? 例如:

#define MAX 32
typedef struct{
    float[3][3];
}Tensor_t;

float tensor_trace(Tensor_t* t);

“tensor_trace”是在某处分配的吗?

最佳答案

顺便说一句,您需要为 float 数组命名。

如果将显示的源代码编译为 C 文件,结果将是一个空目标文件。不会存储任何符号。

如果您使用显示的源代码作为包含在另一个 C 文件中的头文件,该文件调用tensor_trace(),目标文件将没有为其存储的符号.

如果您使用显示的源代码作为包含在另一个 C 文件中的头文件,该文件确实调用了 tensor_trace(),目标文件将为其存储一个符号。在生成调用的地方放置对该符号的引用。链接器会将此引用解析为必须在另一个模块中定义的函数。

所以回答你的问题:

Is "tensor_trace" allocated somwhere?

tensor_trace() 的机器代码将在定义它的模块中“分配”。该声明分配任何空间。

关于C 原型(prototype)函数 - 目标文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58101174/

相关文章:

c++ - 为什么有不同类型的指针?

c++ - C/C++ 线程在条件上的神奇差异

linux - snmp - 连接主机和代理时超时

windows - 保持构建服务器更新的建议

linux - 32 位可执行 session 按 4kb 对齐,它是 elf 格式的一部分吗?

linux-kernel - 什么是 CPU 内核/特权模式,操作系统如何保护它?

连接 char 数组和 int 数组并存储在字符串数组中

c - 有限状态机实现

linux 活着的消息

c++ - 带有自定义* .o文件的“ld: warning: cannot find entry symbol _start; defaulting to 0000000000401000”