2011-07-11 7 views
2

私はVisual Studio 2010環境では初心者です。私はVisual Studio 2008を使って開発されたソースベースを手に入れました。私はVS 2010でビルドしようとしています。リンカがエラーと言っているようにビルドに失敗する - LINK:致命的なエラーLNK1181:入力ファイルX.libを開けません '。リンカーが同じ名前の.libファイルを見つけることができないため、DLLプロジェクトが構築されない

ここで、Xは同じプロジェクトから作成されたlibファイルの名前で、X.dllは出力dllです。実際、X.libはプロジェクトには存在しません。プロジェクトを成功裏に構築しなければ、Dllがうまく構築されることはまったくありません。この「デッドロック」のような状況を解決するにはどうすればよいですか?事前に

おかげで、

シジュー

+0

説明が不明です。 Xはあなたのソリューションに含まれているプロジェクトで、Xを使用する別のプロジェクトですか?もしそうなら、Xプロジェクトだけをビルドできないのはなぜですか?そうでない場合は、あなたのソリューションのプロジェクトをさらに記述してください... – eran

+0

こんにちは、プロジェクトXは私の解決策です。このソリューションには、もう少しプロジェクトがいくつかあります。プロジェクトXは、他のプロジェクトによって生成されたDLLを使用します。その部分は問題ありません。問題は、ソリューションのCleanを作成し、リリースフォルダにあるX.libファイルを削除したことです。後でプロジェクトXがビルドされると、X.dllが作成されます。しかし、ソリューションには存在しない "X.lib"に対して入力依存関係があると言われています。このX.libは、プロジェクトXが正常にビルドされた後にのみ作成されます。だから、私はこの状況を「デッドロック」と似ていると考えました。 –

答えて

1

は私もこの問題を抱えていました。 VS2008プロジェクトをVS2010プロジェクトに変換すると、リンクフェーズはVS2010プロジェクトで同じエラーで破損します。プロジェクトが構築するはずの.libをリンクしようとしています!

私の問題の原因が見つかりました:プロジェクトは、ビルドの最後、PostBuildEventの前に発生するカスタムビルドステップを持っています。このカスタムビルド手順は、.dll、.lib、および.pdbを$(OutDir)から外部の場所にコピーします。

出力一覧にカスタムビルドステップをコピー.dllファイル、.libファイルと.PDBへの完全なパスに設定されているため、例えば:

C:/a_new_location/myproject.dll; 
C:/a_new_location/myproject.lib; 
C:/a_new_location/myproject.pdb. 

私はこの出力リストの.libを含んたびことがわかりました.libがリンクフェーズでリンクするファイルのリストに追加されます。したがって、上記の出力リストで、リンクフェーズは、のファイルリストがあります:

myprojectfile1.obj 
myprojectfile2.obj 
C:/a_new_location/myproject.lib 

をそして、それは失敗するリンクが発生します。

LINK : fatal error LNK1181: cannot open input file 'C:\a_new_location\G4SrcCfgLib.lib' 

カスタムビルドでコピーどうかは問題ではありません。ステップは実際にファイルをコピーするかどうかを示します。重要なことは、出力リストに.libが含まれていることです。だから、私はもちろん、出力リストから.libを削除することで問題を解決しました。この欠点は、クリーンビルドを実行してもC:/ a_new_location/libをクリーンアップできないことです。しかし、少なくともそれは構築する。

関連する問題