我只是将一些代码从一个平台移动到另一个平台,这需要更改编译器版本。其中两个实用程序源导致链接问题与未定义的符号,本例中称它们为Foo.c和Foo.h。
所有内容都在编译并与g ++ 3.4.2完美链接,我认为切换到g ++ 4.1.2将毫无疑问。使用4.1.2时,编译很顺利,但由于未定义的符号,链接失败。 Foo中用于其他源文件的每个函数的符号,即。 Bar.c,虽然Foo.h包含在Bar.c中,但未定义。
问题是Foo.c文件不包含Foo.h.所以问题是,当4.1.2不能时,g ++ 3.4.2如何链接这段代码呢?我认为3.4.2期待一个.h文件然后“神奇地”包含它以避免这个问题。但有没有人有更好的解释?
答案 0 :(得分:4)
3.4和4.1之间存在ABI差异,因此请确保已清理并重新编译项目。并更新了您要链接的所有库。