6

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

1> oscpackd.lib(UdpSocket.obj):エラーLNK2019:関数 "public:__thiscall UdpSocket :: Implementation :: Implementation(void)"(?? 0Implementation @ UdpSocket @@ QAE @ XZ)で参照される未解決の外部シンボル__imp__socket @ 12

1> oscpackd.lib(UdpSocket.obj):エラーLNK2019:関数 "public:__thiscall UdpSocket :: Implementation ::〜Implementation(void)"(?? 1Implementation @ UdpSocket @@ QAE @ XZ )。

..。

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

次に、サンプルソリューションで、main.cppを追加し、oscpackライブラリのフォルダーをインクルードし([properties]> [C / C ++]> [Additional Include Directories])、[Linker]タブで、ライブラリのフォルダーの場所と名前を追加しました。ライブラリの。

4

3 に答える 3

10

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

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

これらの種類の依存関係は、たとえばclosesocket()に関するMSDNの記事から見つけることができます。記事の一番下にあります。ヘッダービットは、#includeする必要があるものを示します、あなたはそれを正しく理解しました。ライブラリビットは、リンカにリンクするように指示する必要があるものを示します。自動ではありません。自分で処理する必要があります。

于 2012-04-06T22:04:38.157 に答える
3

すでに正解があります。リンクするwinsockライブラリを指定する必要があります。しかし、これは小さなプロジェクトでこれを行うための私のお気に入りの方法です #pragma comment(lib, "ws2_32.lib") 。main.cppに配置するだけです(注:MSVC固有)

于 2012-04-06T22:08:55.720 に答える
0

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

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

于 2012-04-06T22:00:39.697 に答える