c++ - C++ 链接器如何知道要使用哪些 .cpp 文件

标签 c++ compilation linker

我是一名 C++ 学习者,我遇到了将代码分成多个文件以加快大型项目的编译过程的概念。

然而,这本书没有告诉我什么,我试图在其他书籍和网络上找到它,但没有运气,链接器(在编译期间)如何知道要包含哪些文件。

当我创建新文件时,我使用 #include "newfile.h" 将它的 header 连接到主文件,但是在这个 header 中我没有写在哪里可以找到函数的定义。

所以我想象的过程是,它从主文件开始,并在那里找到与其他文件的“连接”。问题是它如何找到那些我认为不需要与其头文件同名的 .cpp 文件。

示例:

主文件:

#include <iostream>
#include "krneki_H.h"

using namespace std;


int main()
{
 krneki1();
 krneki2();
 krneki3();
}

和头文件:

void krneki1();
void krneki2();
void krneki3();

和新的 .cpp 文件:

#include <iostream>
#include "krneki_H.h"

using namespace std;

void krneki1() {
cout<<"Krneki1"<<endl;}

void krneki2() {
cout<<"Krneki2"<<endl;}

void krneki3() {
cout<<"Krneki3"<<endl;}

请注意,没有指示使用第二个 cpp 文件。它只知道使用它。它会搜索 map 中的所有 .cpp 文件吗?

谢谢你的回答。

最佳答案

您使用gcc -c 或类似的命令行编译 两个.cpp 文件,然后传递两个。 o 文件生成给链接器。链接器不会神奇地发现您要编译另一个 .cpp 文件。

例如

gcc -c main.cpp -o main.o           # compile
gcc -c krneki_H.cpp -o krneki_H.o   # compile
gcc main.o krneki_H.o -o main       # link

您的 IDE 可能会自动处理这些细节,在这种情况下,它会编译您添加到项目中的所有 .cpp 文件,然后链接生成的所有 .o 文件通过编译步骤。

关于c++ - C++ 链接器如何知道要使用哪些 .cpp 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40096015/

相关文章:

c# - 如何使用Microsoft.CodeAnalysis在内存中进行编译并获取程序集

c - 链接不正确,函数未定义,eclipse GCC 库路径

c++ - 当与服务器的连接未保留时使用 SSL

c++ - C++打印字节流

opencv - Linux上的OpenCV编译:如何向其提供特定的zlib lib?

c - 如何在 Mac 上编译?

c++ - Visual Studio 中的这些 .pch 和 .ncb 文件是什么?

c++ - Directwrite:获取字体的高度

c++ - GLEW 链接器错误 undefined reference to '_glew*'

c - 链接静态 C 库时 undefined reference