【发布时间】:2011-02-04 11:54:26
【问题描述】:
我目前在尝试编译 Objective-C 程序时遇到了一些链接器问题,并认为我无法弄清楚问题的原因可能是由于对编译器过程的无知。
有人可以给我一个编译过程中所采取的步骤的概述吗?
这是我目前理解的流程:
编译器会将任何包含的 .h 文件的内容复制到定义它的文件中。编译器不会跟踪 .h 文件是否已被包含,因此它可能包含在项目多次。
任何 .m 文件都被编译为 C 等效代码(这些代码又被编译为目标代码)。
链接器在 .h 文件中的声明和目标代码中的相应函数之间产生链接。通过在同名的 .m 文件中查找它们来确定适当的函数。
目标文件连接在一起形成可执行文件,确保主函数位于可执行文件的入口点。然后可能会删除任何声明以节省空间?
假设这是正确的(可能不正确),这可能意味着您永远不应该#include .m 文件,因为您最终可能会得到多个方法定义,这会导致链接器问题。
感谢任何人都可以带来的任何启发:)。
干杯,
丹尼
【问题讨论】: