2011-03-28 4 views
1

VS2010でビルド/使用 プラットフォームSDK(Microsoft Windows SDK v7.1)がインストールされています。私はサンプルLSPを構築しようとした際MicrosoftのLSPサンプルコードをビルド

(Cにあります:\プログラムファイル\ MicrosoftプラットフォームSDK \サンプルがNetDS \ WinSockの\ LSP \)

を - RESOLVED--をBEGIN!

以下、同じ2つのエラーのうち16個が発生します。

Error 1 error C1083: Cannot open include file: 'nt.h': No such file or directory c:\program files\microsoft sdks\windows\v7.1\samples\netds\winsock\lsp\nonifslsp\lspdef.h 22 1 LSP 
    Error 7 error C1083: Cannot open include file: 'lspcommon.h': No such file or directory c:\program files\microsoft sdks\windows\v7.1\samples\netds\winsock\lsp\install\instlsp.h 35 1 LSP 

このサンプルのソースコードをVSに追加すると、ファイル>新しいプロジェクトの既存のコードが使用されます。 これを実行すると、VSはすべてのPlatform SDKインクルードファイルのインポートを開始します。私はPSDKのインクルードを持たないのは問題を引き起こすだろうと他の場所で読んでいたが、ここではそうではないようだ。

! - 解決済み - !

は、私は今、上記の問題を修正した後、3つの以上のエラーに遭遇:

Error 1 error LNK2005: "struct _GUID gProviderGuid" ([email protected]@[email protected]@A) already defined in lspguid.obj C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\netds\winsock\lsp\instlsp.obj LSP 
Error 6 error CVT1100: duplicate resource. type:MANIFEST, name:1, language:0x0409 C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\netds\winsock\lsp\CVTRES LSP 
Error 7 error LNK1123: failure during conversion to COFF: file invalid or corrupt C:\Program Files\Microsoft SDKs\Windows\v7.1\Samples\netds\winsock\lsp\LINK LSP 

私はLSPサンプルで内容/ファイルのいずれかを変更していません。

現在、私はそれを構築しようとしています。

これについての洞察は役に立ちます。

ありがとうございました。

+0

どのようにビルドしていますか?コマンドラインから、IDEなど... – JaredPar

+0

IDEを使用して、ありがとう。 – Dacto

+0

私はそれがファイルを終了しないでください - いくつかのソースが見つかりましたが、私は確かに任意の選択に注意しますが、興味があればリンクがあります:http://www.komodia.com/lsp/lsp-sample/ –

答えて

0

#include <nt.h>#include <winnt.h>に変更して、それが構築されているかどうかを確認してください。

1

ビルドに定義し、これを追加します。それは

2

にファイルlspcommon.hをあなたの問題を解決するだろう_PSDK_BLD はLSPサンプルの一部であり、あなたは、「共通の」サブフォルダにそれを見つけることができるはずです。 (C:¥Program Files¥Microsoft SDKs¥Windows¥v1.1¥Samples¥netds¥winsock¥lsp¥common)

エラーのいずれかをダブルクリックすると、問題を引き起こしている行に合わせてエディタが開きます。マクロ_PSDK_BLDでない場合にのみ含まれています...意味

#ifndef _PSDK_BLD 
#include <nt.h> 
#include <ntrtl.h> 
#include <nturtl.h> 
#endif 

、nt.hファイル(他2名)をlspdef.hライン22のためにそれを行うと、あなたは、コードは次のようになります表示されます定義された。ライン35で少し下を見て、マクロがコードファイルlspcommon.hが含まれていますが、マクロの場合は定義されていない場合は、この場合、

#ifndef _PSDK_BLD 
#include <lspcommon.h> 
#else 
#include "..\common\lspcommon.h" 
#endif 

...コードは次のようになります表示されますである場合、コードには共通のfoiderからのlspcommon.hファイルが含まれています。

_PSDK_BLDが定義されていないため、問題が発生しているようです。 #ifdefのスタイルから、定義された特定の値にマクロを定義する必要があるようには見えません。

Visual Studioの[プロジェクトのプロパティ]で、C/C++にドリルダウンしてから[プリプロセッサ]を選択します。次に、プリプロセッサの定義行を見つけ、その値をクリックします。編集を選択し、_PSDK_BLDをプリプロセッサ定義のリストに追加します。

その先頭の下線を付けろ、およびデバッグのための変更を行うと構成(あなたが定義されている可能性のあるすべてのプラットフォーム用)をリリースすることを忘れないでください


エラーLNK2005は、リンカが二つの定義を見つけたことを意味しますリンクしようとしているオブジェクトに対しては、リンカが2つの定義のどちらを使用すべきかを知る方法がないため、問題になります。

この特定のケースでは、リンカーが解決しようとしているオブジェクトは "struct _GUID gProviderGuid"です。あなたがファイルを見ると、lspdef.h(それらの両方を)instlsp.h、あなたがタイプGUIDのgProviderGuid(これと呼ばれる外部変数を宣言し、この

extern GUID     gProviderGuid; 

のようなコードが表示されますlspcommon.h構造体です)。リンカーは、これらのヘッダーファイルのいずれかを含むファイルでその外部参照を解決してから、gProviderGuidへの参照を作成する必要があります。

エラーの「lspguid.objで既に定義されている」部分から、リンカーはlspguid.objファイルを見て、gProviderGuidの定義を見つけました。確かに、lspguid.cppを見ると、0xc5fabbd0で始まる値を持つgProviderGuidの定義を見ることができます。

「C:\プログラムファイル\マイクロソフトのSDK \ WINDOWS \ V7.1の\サンプル\ netds \ Winsockの\ LSP \ instlsp.obj」から、同じエラーの一部我々は、リンカーはまた、ファイル内で見たことを知っていますinstlsp.objを実行し、gProviderGuidの2番目の定義を見つけました。 intlsp.cppの中を見ると、gProviderGuidの別の定義を見ることができます(今度は値なし)。

問題は、リンカがlspguid.objとintlsp.objの両方を探していて、gProviderGuidの矛盾する定義を見つけているということです。

これらの2つのファイルは同じビルドの一部であってはいけません。そのため、リンカーの1回の実行で同時にそれらを読み取る必要はありません。

LSPプロジェクトは、4つの部分で構成されています。lspcommon:静的ライブラリlspcommon.libを生成するために使用されます。ファイルifslsp.dllの生成に使用されるifslsp。 nonifslspはファイルnonifslsp.dllを生成するために使用され、installはファイルInstlsp.exeを生成するために使用されます。詳細については、lspのreadme.txtファイルとさまざまなフォルダのmakefileファイルを参照してください。

Visual Studio内でLSPを構築する場合、実際にはlspcommon、ifslsp、nonifslsp、installの4つの異なるプロジェクトがソリューションに必要です。

+0

私はあなたの助言に従いました。問題を解決するために働いていましたが、別の3つのエラーが発生しました。(メイン質問の投稿に追加されました) – Dacto

+0

これは単なる推測ですが、 'File> New ProjectFrom Existing Code' 1つの大きなLSPプロジェクトを作成するか、Instlsp.exe、ifslsp.dllおよびnonifslsp.dllを生成するために別々のプロジェクトを作成しましたか? –

+0

あなたは私が1つの大きなプロジェクトを作ったと仮定しても大丈夫です。今のテスト。 – Dacto

関連する問題