我只是将一些代码从一个平台移动到另一个需要更改编译器版本的代码。其中两个实用程序源导致了与未定义符号的链接问题,在本示例中将它们称为 Foo.c 和 Foo.h。
一切都在用 g++ 3.4.2 编译和链接,我认为切换到 g++ 4.1.2 将是不费吹灰之力。使用 4.1.2 时编译正常,但由于未定义的符号链接失败。在其他源文件中使用的 Foo 中每个函数的符号,即。即使 Foo.h 包含在 Bar.c 中,Bar.c 也未定义。
问题是 Foo.c 文件不包含 Foo.h。那么问题来了,g++ 3.4.2 是如何在 4.1.2 不能链接的时候链接这段代码的呢?我认为 3.4.2 期待一个 .h 文件,然后“神奇地”包含它以避免这个问题。但是有人有更好的解释吗?