有人可以解释 g++ 3.4.2 和 g++ 4.1.2 之间的链接器差异吗?

问题描述 投票:0回答:1

我刚刚将一些代码从一个平台移动到另一个平台,这需要更改编译器版本。 其中两个实用程序源导致与未定义符号的链接问题,在本示例中将它们称为 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。所以问题是,当 4.1.2 无法链接时,g++ 3.4.2 是如何链接这段代码的? 我认为 3.4.2 需要一个 .h 文件,然后“神奇地”包含它以避免这个问题。 但有谁有更好的解释吗?

linker g++
1个回答
4
投票

3.4 和 4.1 之间存在 ABI 差异,因此请确保您已清理并重新编译该项目。并更新了您链接的所有库。

© www.soinside.com 2019 - 2024. All rights reserved.