0

複数のプロジェクトを含むソリューション ファイル (VS 2005) に取り組んでいます。

現在、私が関心を持っている 2 つのプロジェクトがあります。1 つは core と呼ばれ、もう 1 つは log と呼ばれます。

コア プロジェクトはスタートアップ プロジェクトであり、ログ プロジェクトはそのプロジェクトの依存関係でコアがチェックされています。

コア プロジェクトには、AB.h(宣言) と AB.cpp(定義) の 2 つのファイルがあります。

コア プロジェクトの他の多くの cpp ファイルは AB.h を参照しており、AB.cpp で定義を見つける際に問題はありません。

今問題が来ます。AB.h を参照する必要があるログ プロジェクトに、CD.cpp という名前の cpp ファイルがあります。AB.h のインクルード ディレクトリをコア プロジェクトとログ プロジェクトの両方に追加しました (AB.cpp も同じフォルダーにあります)。

さらに、ログ プロジェクトには、プロジェクト設定のリンカー部分の「追加のライブラリ ディレクトリ」パラメーターに $(OutDir) があります。また、Properties->Linker->Input の [Additional Dependencies] フィールドに「core.lib」を追加しました。

コア プロジェクトは dll にコンパイルされますが、他のジャンクの中で同じフォルダーに core.lib もあります。リリース バージョンとしてコンパイルされたソリューション。

CD.cpp で、#include "AB.h" 行を右クリックすると、コア フォルダーの .h ファイルに移動します。これまでのところ、すべて問題ありません。ただし、ソリューションをコンパイルしようとすると、ログ プロジェクトが正しくビルドされず、これら 2 つのリンカー エラーが表示されます。

log.obj : エラー LNK2001: 未解決の外部シンボル "クラス myNamespace::myClass myInstance" (?myInstance@@3VmyClass@myNamespace@@A)

log.obj : エラー LNK2001: 未解決の外部シンボル "bool infFlag" (?infFlag@@3_NA)

このクラスは、AB.h に含まれる h ファイルの一部です (インスタンスは AB.cpp で宣言され、CD.cpp に extern として含まれます。infFlag は AB.cpp で宣言され、CD.cpp で extern として宣言されます。

ログを適切に構築するにはどうすればよいですか? ありがとう


わかった。もっと詳細が必要です。もちろん。

1 つのソリューション ファイル。複数のプロジェクト。

[芯]

AB.h と AB.cpp を含む

-AB.h

-- 外部ライブラリの EF.h をインクルードします (このライブラリの関数は、同じコア プロジェクト内のファイルに対して適切に機能します)。

-- いくつかの関数を宣言します

-AB.cpp

-- AB.h で宣言された関数を定義します。

- AB.h の関数を問題なく使用できる他の cpp ファイル

[/芯]

[ログ -> プロジェクトの依存関係 -> コア]

-h ファイルなし

-CD.cpp

-- 機能するには AB.h が必要です。#include コマンドに含まれており、適切にリンクされています (右クリックして「ファイルを開く」をクリックすると、実際の .h ファイルを開くことができます)

-- AB.h の関数を使用

[/ログ]

これにより、私のソリューションのプロジェクト構造をよりよく理解できるようになることを願っています。

Log プロジェクトのコンパイル時に問題が発生します。「未解決の外部シンボル」というAB.hの関数への参照に対して、常にリンクエラーが発生します。これは、AB.h で宣言されている関数の定義が見つからないためだと思います (おそらく別のプロジェクトであるため)。ログはコアに依存しており、コアはその時点でコンパイルされているため、$(OutputDir) をライブラリ ディレクトリ (コアとログの両方が同じディレクトリにビルドされます) に追加して、core.lib を見つけ、「コア」も追加できるようにしました。 .lib" を、[リンカー] の下の [入力] タブ (プロジェクト プロパティ内) の [追加の依存関係] に変更します。

では、どうぞ。何か案は?


4

1 に答える 1

0

さらに、ログプロジェクトでは、プロジェクト設定のリンカー部分の[追加のライブラリディレクトリ]パラメーターに$(OutDir)が含まれています。

おそらく間違っています。「core.lib」が存在するディレクトリである必要があります。これ$(OutDir)は、が配置される場所logです。

このクラスは、AB.hに含まれるhファイルの一部です(AB.cppで宣言され、CD.cppでexternとして含まれるインスタンス。infFlagはAB.cppで宣言され、CD.cppでexternとして宣言されます。

では、定義はどこにありますか?

于 2010-08-15T08:42:34.693 に答える