Rex*_*exi 4 c++ linker compilation class header-files
例如,我有一个类 Foo。我创建Foo.h,Foo.cpp然后将其包含Foo.h在main.cpp文件中。当我编译代码时,机器怎么知道将类头文件和类cpp文件关联起来?它是由文件名完成的吗?
我真的很想了解这个编译和链接的过程。
当我编译代码时,机器如何知道将类头文件和类 cpp 文件关联起来?它是通过文件名来做的吗?
不,编译器没有这种自动关联。
如果您有一个包含所有函数和类声明的头文件,它必须#included来自任何.cpp使用它的翻译单元(文件)。
该步骤(声明合同)由 c 预处理器完成,其中每次出现都#include "MyDeclarations.hpp"将其替换MyDeclarations.hpp为翻译单元中的完整文件内容。
一个简单的例子:
文件
class Foo {
public:
Foo(); // Constructor declaration
};
Run Code Online (Sandbox Code Playgroud)
文件
#include "Foo.hpp" // <<<< Include declarations
Foo::Foo() {} // Constructor definition
Run Code Online (Sandbox Code Playgroud)
主程序
#include "Foo.hpp" // <<<< Include declarations
int main() {
Foo foo; // <<<<< Use declarations
}
Run Code Online (Sandbox Code Playgroud)
要最终指示您的链接器将所有这些文件拼接在一起,您必须参考从翻译单元生成的工件。取决于工具链,但对于例如 GCC,您可以使用一些编译器命令行,例如
$ g++ main.cpp Foo.cpp -o myProg
Run Code Online (Sandbox Code Playgroud)