c++ - 在C和C++中,链接器如何找到具有已实现功能的正确文件?

标签 c++ c linker

这是我用 C 编写的代码。我习惯了 Java,因此我不明白 C 编译器如何使用实现的方法找到正确的源文件。

例如,如果我将sample_c1.cpp文件与Main.cpp放在一起,它将转到sample_c1.cpp的on_start()。如果我删除sample_c1.cpp并将sample_c2.cpp与Main.c放在一起,它将转到sample_c2.cpp的on_start()。

这是我的测试程序:

主.c

//no includes to sample_c1.cpp or sample_c2.cpp

void on_start();
void on_stop();
int main(int argc, char* argv[]){

    on_start();
    return 0;
}

sample_c1.cpp

//this is all i have in the file no class definition no nothing just implementations of the methods 
void on_start(){
    ....
}

void on_stop(){
    ......
}

sample_c2.cpp

//this is all i have in the file no class definition no nothing just implementations of the methods 
void on_start(){
    ....
}

void on_stop(){
    ......
}

最佳答案

您的 IDE 告诉编译器*您项目中所有源文件的名称。编译器*同时处理它们。如果它发现您正在调用未在同一源文件中定义的函数,那么它将在其他源文件中查找。如果您有一个名为 sample_c1.cpp 的文件,那么它将在那里查找。如果您有一个名为 sample_c2.cpp 的文件,那么它将在那里查找。如果您有一个名为 travel_back_in_time_and_murder_hitler.cpp 的文件,那么它会在那里查找。

确实没有什么令人兴奋的事情发生。没有像 Java 中那样的“类路径”。只是一堆制作程序的源文件。

 

* 实际上是链接器,但是编译器和链接器之间的区别超出了这个问题的范围。它基本上只是编译器的另一部分。

关于c++ - 在C和C++中,链接器如何找到具有已实现功能的正确文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32163200/

相关文章:

c++ - 使用 OpenCV 从图像中去除水印

C++:空类对象的大小是多少?

c++ - 我可以比这更快地将一维 vector 转换为二维 vector 吗?

c - 静态 const 与 const 声明在 uC 上的性能差异

c++ - 更改代码,以便从命令行输入您要编写的文件的名称

c - 初学者在 C 中使用 fopen 命令的困难

c++ - 未定义的类型特征引用

c++ - 来自指针的数组索引

objective-c - 添加一个大的静态库作为 cocoapod 或直接将所有目标文件添加到生成的二进制文件中,因为 -ObjC 链接器标志

c - 如何正确安装libpng?