13

私は最近、2005 から 2012 にアップグレードし (確信しています)、ソリューションをビルドするときにリンク エラーが発生しました。何時間も Google を検索していろいろ考えた末に、アイデアが尽きてしまいました。私は何十ものプロジェクトを設定したので、すべてを正しく行ったと確信していますが、公平を期すために、数年が経ちました.

そこで、テストとして、新しいプロジェクトをセットアップしました。私はそれをアプリ、Windows アプリケーション (.exe) と呼びました。Core という名前の 2 番目のプロジェクトを作成し、その構成タイプでスタティック ライブラリ (.lib) としてフラグを立てました。どちらもソリューションの一部です。コアに、単純な機能を持つ小さなクラスを含む Test.cpp と Test.h を追加しました。次に、ウィンドウのアプリケーションの WinMain.cpp ファイル内に WinMain() があり、CTest テストを介してこのテスト クラスを呼び出します。テスト結果();

これに伴い、プロジェクト App の Project Dependencies を Core に設定し、最終的に Test.cpp/.h が存在する Core コードへのパスを App の追加のインクルード ディレクトリに追加しました。

次のリンクエラーが発生し、一生理由を理解できません。私が見逃した可能性のあるステップや、2012年に以前のバージョンから何が変更されたかを知っている人はいますか? 助けてくれてありがとう!

1>------ Build started: Project: App, Configuration: Debug Win32 ------
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::CTest(void)" (??0CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::~CTest(void)" (??1CTest@@QAE@XZ) referenced in function _WinMain@16
1>WinMain.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::Result(void)" (?Result@CTest@@QAEHXZ) referenced in function _WinMain@16
1>D:\Work\Test_Linker_Stupidity\App\Debug\App.exe : fatal error LNK1120: 3 unresolved externals
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ========
4

1 に答える 1

27

Visual Studio 2005 は、プロジェクトの依存関係にいくつかの魔法をかけて、.lib 出力に自動的にリンクします (残念ながら、私はそれを実装するのを手伝った開発者でした)。これは、古い Visual C++ ビルド システムが MSBuild に置き換えられた Visual Studio 2010 以降に削除されたようです。

ただし、「静的ライブラリの依存関係の自動リンク」機能は、プロジェクト参照を介して引き続き見つけることができます。

  • アプリ プロジェクトを右クリックし、[参照...] を選択します。
  • 「新しい参照を追加」をクリックします。
  • スタティック ライブラリ プロジェクトを確認し、[OK] をクリックします。
  • 建てる。

これで、スタティック ライブラリが自動的にリンクされていることがわかります。プロジェクト参照は、プロジェクトの依存関係も意味することに注意してください。

代わりにプロジェクトの依存関係を使用する場合は、他の静的ライブラリ入力の場合と同様に、"App" プロジェクトのリンカーの追加の依存関係プロパティに静的ライブラリを追加する必要があります。

編集: また、プロジェクト参照に「Link Library Dependencies」というプロパティが表示されます。これは、参照されたプロジェクトの .lib 出力がリンクされるかどうかを制御します (デフォルトは true)。

于 2012-11-19T09:29:52.737 に答える