2

Visual Studio 2010 で C++ を使用しています。クライアントとサーバーの両方が同じ「エンジン」に依存するクライアント サーバー アーキテクチャを構築しようとしています。

以下は、これを説明する図です。

画像 http://img266.imageshack.us/img266/5573/dependencies.png

どこ:

エンジン- アプリケーション固有のエンジン

BaseEngine - アプリケーション固有ではないエンジン (他のアプリケーションで使用)

SomeLibrary - BaseEngine が依存するライブラリ

Visual Studio を使用して、適切なプロジェクト参照と「インクルード ディレクトリ」を設定しました。

クライアントはエンジン内のメソッド参照でき、エンジンはBaseEngine内のメソッドを参照できます。ただし、問題は、クライアントやサーバーがエンジンでメソッドを呼び出すときに、いくつかのリンク エラー(LNK1120、LNK2001) が発生することです。

これは、エンジンが BaseEngine に依存しており、クライアントが BaseEngine に依存していないために発生しているようです。

だから私の質問は:

クライアントとサーバーが BaseEngine を参照する必要がないように、Engine と BaseEngine プロジェクトをまとめることはできますか?

4

1 に答える 1

2

問題は、リンカー エラーは Engine.lib に関連しているのか、それとも BaseEngine.lib に関連しているのかということです。
BaseEngine.lib によってエクスポートされ、クライアント/サーバーで参照される関数に問題があり、未解決のシンボルが発生すると思います。
クライアント/サーバーが BaseEngine.lib によってエクスポートされた機能に依存しているが、Engine.lib のみを参照する場合は、BaseEngine ライブラリを直接参照するか、BaseEngine.lib によって明示的に提供されるこれらの機能を Engine.lib に転送させる必要があります。
Engine.lib が BaseEngine.lib に依存 (および参照) しているという事実は、BaseEngine.lib の機能が Engine.lib によってシームレスに転送されることを意味するものではありません。あなたはこの仮定に出くわしていると思います。リンカは、BaseEngine.lib から Engine.lib までの機能が本当に必要な場合にのみインクルードします。ただし、明示的にそうするまで、この機能は他の依存関係 (この場合はクライアント/サーバー) には表示されません。Engine.lib にある種のラッパー機能を記述して、クライアント/サーバーが参照する BaseEngine.lib から関数を転送することをお勧めします。

于 2012-06-09T07:34:02.770 に答える