首页 > 解决方案 > C 原型函数 - 目标文件

问题描述

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

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

float tensor_trace(Tensor_t* t);

“tensor_trace”是否分配在某个地方?

标签: clinuxelfobject-filessymbol-table

解决方案


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

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

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

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

所以回答你的问题:

“tensor_trace”是否分配在某个地方?

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


推荐阅读