【发布时间】:2018-01-27 17:59:32
【问题描述】:
以我有两个源文件func.cpp和main.cpp为例。 func.cpp 包含 10 个函数的定义。在 main.cpp 中包含 func.cpp 的相应头文件。现在编译器将分别编译目标文件 func.o 和 main.o 中的两个源文件。现在是链接器。链接器如何知道 main.cpp 是我的主文件并且具有从其他文件调用的一些函数并且需要解析它们?意味着为什么它不会在最终的可执行文件中转换 func.o,它没有需要解析的函数引用。另一方面,仅使用 func.o 中的一个函数的 main.o 通过解析该引用将转换为可执行文件。最终的可执行文件是否还会包含与 main.cpp 中未调用的其余 9 个函数相对应的目标代码?
【问题讨论】:
-
为什么你认为链接器需要知道
main()在所有应用的输入文件中的哪一个被实现了?只需确保您有一个,并且链接器以正确的顺序看到它。 -
试试在两个文件中都放一个 main 会发生什么。
-
@manni66 至少最终可执行文件中会出现什么。所有 10 个函数,还是仅在 main 中调用的那个?
-
在 linux 上尝试 nm 或在 windows 上尝试 dumpbin。
标签: c++ c compilation linker