0

あるプラットフォームから別のプラットフォームにコードを移動したところ、コンパイラのバージョンを変更する必要がありました。ユーティリティソースのうちの2つは、未定義のシンボルとのリンクの問題を引き起こしました。この例では、それらを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ファイルを予期していて、この問題を回避するために「魔法のように」それを含めていたと思います。しかし、誰かがより良い説明を持っていますか?

4

1 に答える 1

4

3.4 と 4.1 の間には ABI の違いがあるため、プロジェクトをクリーンアップして再コンパイルしたことを確認してください。リンクしているすべてのライブラリを更新しました。

于 2009-03-24T14:59:42.497 に答える