LinuxでC++を使用してモジュールをビルドしようとすると、厳しい「未定義の参照」エラーが発生しました。これについては大まかに説明し、必要に応じて後でコードを投稿します(独自仕様であるため、投稿するには名前を変更する必要があります)。いくつかの詳細:
- モジュールA(ライブラリ)には、Barというメソッドを使用してFooと呼ぶクラスがあります。モジュールAは問題なくビルドされ、nmを使用してオブジェクトファイルを確認すると、コンストラクターとBarの両方が定義されていることがわかります(これらは「T」として表示されます)。
- モジュールB(ライブラリ)には、Foo :: Foo、Foo ::〜Foo、およびFoo::Barを参照するモジュールAを使用するクラスが含まれています。そのmakefileには、-L / path / to/Fooと-lFooが含まれています。このモジュールも問題なく構築されます。ただし、モジュールBのオブジェクトファイルでnmを実行すると、モジュールFoo :: Foo、Foo ::〜Foo、およびFoo :: Barの呼び出しは定義されていません(「U」と表示されます)。なぜそれが構築されるのかは私を超えています。
モジュールC(出力は実行可能ファイル)には、モジュールBへの参照が含まれています。モジュールCをビルドしようとすると、モジュールBからモジュールAのFooおよびBarメソッドへの未定義の参照を叫びます。
- 参照が未定義の場合、モジュールBがビルドされるのはなぜですか?
- モジュールCに到達したときにのみエラーが報告されるのはなぜですか?
編集:
- モジュールCのmakefileにも-L/path / to / Fooと-lFooがありますが、それでも失敗します。私が試してみるべきことについての高レベルの推測はありますか?コードを投稿しなければならないような気がします...