2012-04-06 27 views
4

私はプロジェクトの静的ライブラリとしてoscpack(http://code.google.com/p/oscpack/)を使用したいが、例に追加しようとするとリンクエラーが発生する:Visual Studio 2010で静的ライブラリをプロジェクトにリンクする

1> oscpackd.lib(UdpSocket.obj):エラーLNK2019:関数内で参照さ12 @未解決の外部シンボル__imp__socket "公共:__thiscall UdpSocket ::実装::実装(無効)"(?? 0Implementation @ UdpSocket @@ oscpackd.lib(UdpSocket.obj):エラーLNK2019:未解決の外部シンボル__imp__closesocket @ 4が関数 "public:__thiscall UdpSocket :: Implementation"で参照されています。 ::〜実施(無効)」(?? 1Implementation @ UdpSocket @@ QAE @ XZ)

...

は基本的に、私はプロジェクトIで、oscpack.libを構築するためのソリューションを作成しました対応する.hと.cppファイルを追加しました。

次に、私のmain.cppを追加してから、oscpackライブラリのフォルダを(プロパティ> C/C++> Additional Include Directories)インクルードして、リンカタブにフォルダを追加しました。 libsとlibsの名前。

答えて

10

ソリューションエクスプローラウィンドウでプロジェクトを右クリックし、[プロパティ]> [リンカ]> [入力]> [追加の依存関係]の順にクリックします。 ws2_32.libを追加する必要があります。

VSプロジェクトテンプレートは、最も一般的なWindowsライブラリをリンクするようにリンカに指示します。 kernel32.libと同様に、Windowsプログラムを書き込むこともできません。しかし、winsockではなく、すべてのプログラムがソケットを作成したいと考えているわけではありません。それは明示的に追加する必要があります。

これらの種類の依存関係は、MSDNの記事(closesocket()など)から見つけることができます。それは記事の一番下にあります。 ヘッダービットは、#includeする必要があることを示しています。 ライブラリビットは、リンカーにリンクするために必要な情報を示します。自動ではなく、あなた自身で世話をする必要があります。

+1

! – JohnnyAce

0

ライブラリとmain.cppを別々のソリューションに入れているとしますか?それらを同じソリューションに入れて、プロジェクト参照を適切に設定してください。

また、正しいビルド構成に変更を加えたことを確認してください。 I.デバッグモードで構築する場合は、lib名とヘッダーディレクトリをデバッグ構成に追加したことを確認してください。

2

すでに正しい答えがあります。リンクするには、winsockライブラリを指定する必要があります。 しかし、これは小規模なプロジェクトのためにそうする私の好みの方法である: #pragma comment(lib, "ws2_32.lib") ちょうどあなたのmain.cppに(注:MSVCの特定)に入れて、私もWINMM.LIBの感謝を追加する必要がありますけれどもそれは、働いていた

関連する問題