【问题标题】:Can someone explain this linker difference between g++ 3.4.2 and g++ 4.1.2?有人可以解释 g++ 3.4.2 和 g++ 4.1.2 之间的链接器区别吗?
【发布时间】:2009-03-24 14:19:55
【问题描述】:

我只是将一些代码从一个平台移动到另一个需要更改编译器版本的代码。其中两个实用程序源导致了与未定义符号的链接问题,在本例中将它们称为 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 文件,然后“神奇地”包含它以避免这个问题。但是有人有更好的解释吗?

【问题讨论】:

    标签: g++ linker compiler-construction


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-23
      • 2016-10-10
      • 2019-05-14
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      • 2013-12-04
      相关资源
      最近更新 更多