Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 链接器如何知道两个源文件中的哪个是主文件,而另一个包含函数定义?_C++_C_Compilation_Linker - Fatal编程技术网

C++ 链接器如何知道两个源文件中的哪个是主文件,而另一个包含函数定义?

C++ 链接器如何知道两个源文件中的哪个是主文件,而另一个包含函数定义?,c++,c,compilation,linker,C++,C,Compilation,Linker,例如,我有两个源文件func.cpp和main.cpp。func.cpp包含10个函数的定义。在main.cpp中包含func.cpp的相应头文件。现在,编译器将分别在目标文件func.o和main.o中编译源文件。现在是链接器。链接器如何知道main.cpp是我的主文件,并且有一些从其他文件调用的函数,这些函数需要解析?这意味着为什么它不会在最终可执行文件中转换func.o,因为它没有需要解析的函数引用。另一方面,main.o只使用func.o中的一个函数,它通过解析该引用转换为可执行文件。最

例如,我有两个源文件func.cpp和main.cpp。func.cpp包含10个函数的定义。在main.cpp中包含func.cpp的相应头文件。现在,编译器将分别在目标文件func.o和main.o中编译源文件。现在是链接器。链接器如何知道main.cpp是我的主文件,并且有一些从其他文件调用的函数,这些函数需要解析?这意味着为什么它不会在最终可执行文件中转换func.o,因为它没有需要解析的函数引用。另一方面,main.o只使用func.o中的一个函数,它通过解析该引用转换为可执行文件。最终的可执行文件还会包括与main.cpp中未调用的其余9个函数相对应的目标代码吗

链接器如何知道main.cpp是我的主文件,并且有一些从其他文件调用的函数,这些函数需要解析

链接器并不真正关心哪个文件具有
main()
,它只需查看所有对象文件中是否有一个(并且只有一个)
main()

这意味着为什么它不会在最终可执行文件中转换func.o,因为它没有需要解析的函数引用。另一方面,main.o只使用func.o中的一个函数,它通过解析该引用转换为可执行文件

链接器不会将任何单个对象文件转换为可执行文件;它将所有对象文件链接到一个可执行文件中

最终的可执行文件还会包括与main.cpp中未调用的其余9个函数相对应的目标代码吗


视情况而定。有关详细说明,请参阅。

为什么您认为链接器需要知道应用的输入文件
main()
是在哪些文件中实现的?只要确保你有一个,链接器就会在右边看到它。试着在两个文件中都放一个main时会发生什么,至少在最终的可执行文件中会出现什么。所有的10个函数或者仅仅是在main中调用的那一个?在linux上试试nm,在windows上试试dumpbin。