我不是任何语言或 GCC 的专家。所以我的问题可能低于标准。
我正在使用 GCC 构建一个包含数千个 CPP 文件的代码库。在一个文件中说A.cpp
我正在调用B.cpp
[B.cpp
包含定义的类的类方法定义B.h
]中的一些函数。构建没问题。B.o
但是后来我从makefile中排除了。所以现在B.o
没有创建目标文件。但在这种情况下,我预计在编译或链接阶段会出错,因为A.cpp
是从B.cpp
. 但是没有,代码仍然没有错误地构建。但是当我将 fn 调用从A.cpp
另一个文件移到另一个文件C.cpp
时,它给了我一个链接器错误,这是我认为的预期行为。
这是预期的行为吗?我还检查了在构建期间创建的映射文件,其中列出了所有函数名称,并且B.cpp
即使没有创建 B.cpp 的目标文件,映射中的函数也存在。所以我的问题是为什么当我从不属于构建的文件中调用函数时没有错误。我尝试从以前的版本中删除所有目标文件和二进制文件以清理可能存在的任何残留物,但无济于事。我没有任何线索。任何人都可以提供一些帮助吗?
在我的地图文件中,普通功能如下所示
80010820 T __gccmain
80010828 t __gccmain_end
ETC
但是来自 B.cpp 的 fns 被列为
U CNvThread::ProcMsgReq(unsigned, void*)
U CNvDbMgrThread::Singleton(unsigned long)