4

新しいアプリケーションでZeroMQを使用しようとすると問題が発生します。注意:ZeroMQ自体のダウンロードとビルドに問題はありません。ZeroMQ ZIPファイルをダウンロードし、Visual Studio / C ++ 2008でプロジェクト/ソリューションファイルを開いて、ZeroMQライブラリを正常にビルドしました。ZeroMQインストールフォルダの/libディレクトリには、.lib、.dll、およびその他のファイルが含まれているため、私が知る限り、すべてがそこにあります。

私の問題は、ZeroMQユーザーガイドのHelloWorldサーバーの例で構成される単純なプロジェクトを構築しようとしていることです。helloserver.cというファイルを作成しました。

//
// Hello World server
// Binds REP socket to tcp://*:5555
// Expects "Hello" from client, replies with "World"
//
#include <zmq.h>
#include <stdio.h>
#include <string.h>

int main (void)
{
zmq_msg_t request;
zmq_msg_t reply;

void *context = zmq_init (1);

// Socket to talk to clients
void *responder = zmq_socket (context, ZMQ_REP);
zmq_bind (responder, "tcp://*:5555");

while (1) {
// Wait for next request from client

    zmq_msg_init (&request);
    zmq_recvmsg (responder, &request, 0);
    printf ("Received Hello\n");
    zmq_msg_close (&request);

// Do some 'work'
    Sleep (1);

// Send reply back to client
    zmq_msg_init_size (&reply, 5);
    memcpy (zmq_msg_data (&reply), "World", 5);
    zmq_sendmsg (responder, &reply, 0);
    zmq_msg_close (&reply);
}
// We never get here but if we did, this would be how we end
zmq_close (responder);
zmq_term (context);
return 0;
}

ZeroMQインストールインクルードディレクトリをVC++2008インクルードパスに追加し([プロパティ]->[構成プロパティ]->[C / C++]->[一般]->[追加のインクルードディレクトリ])、ZeroMQライブラリディレクトリもプロジェクトに追加しました:(プロパティ- >[構成プロパティ]->[C/ C ++]->[コード生成]->[ランタイムライブラリ]、[マルチスレッドデバッグDLL / MDd]を選択)。

私はプロジェクトを構築しようとしました。すべてが正常にコンパイルされますが、リンクすると、次のような未解決の外部がたくさん表示されます。

1>リンク中...1>helloserver.obj:エラーLNK2019:関数_mainで参照される未解決の外部シンボル_ imp_zmq_term 1> helloserver.obj:エラーLNK2019:関数_mainで参照される未解決の外部シンボル_ imp _zmq_close 1> helloserver.obj:エラーLNK2019:未解決の外部シンボル_imp_zmq_sendmsgが関数_main1>helloserver.objで参照:エラーLNK2019:未解決の外部シンボル_imp_zmq_msg_dataが関数_main1>helloserver.objで参照:エラーLNK2019:未解決の外部シンボル_ imp _zmq_msg_init_ _main 1> helloserver.obj:エラーLNK2019:未解決の外部シンボル_ imp関数_main1>helloserver.objで参照される_zmq_msg_close:エラーLNK2019:関数_main 1>helloserver.objで参照される未解決の外部シンボル_imp_zmq_recvmsg エラーLNK2019:関数_main1>helloserver.objで参照される未解決の外部シンボル_imp_zmq_msg_init:エラーLNK2019:未解決の外部シンボル_imp_zmq_bindが関数_main1>helloserver.objで参照:エラーLNK2019:未解決の外部シンボル_imp_zmq_socketが関数_main1 >helloserver.objで参照:エラーLNK2019:未解決の外部シンボル_imp_zmq_initが関数_mainで参照1> C:\ work \ visualc ++ 2008 \ projects \ HelloZMQServer \ Debug \ HelloZMQServer.exe:致命的なエラーLNK1120:11の未解決の外部

コード生成->ランタイムライブラリ設定に戻って、ライブラリスイッチを?MDまたは/ MTに変更しようとしましたが、何も機能しませんでしたが、これらのリンカーエラーが発生します。

helloworld.cを作成したとき、空のWindowsコンソールアプリケーションプロジェクトを使用しました。変更したのは、上記のようにZeroMQincludeディレクトリとlibディレクトリを追加することだけでした。他のデフォルトのプロジェクト設定は変更していません。どこかにプロジェクト設定がないのではないかと思います。

どうすればこれを修正できますか?

4

3 に答える 3

6

同様のエラーが発生したのは、64ビットライブラリを32ビットプロジェクトにリンクしようとしたためです。間違ったバージョンをダウンロードしました。私が正しいもの、つまりx64ではなくx86を入手したとき、それは機能しました。

于 2013-12-30T18:35:23.410 に答える
4

ZMQライブラリパス(ZMQライブラリがインストールされているパス\ zeromq-2.1.10 \ lib)をプロジェクトに追加します。

[プロジェクト]->[プロパティ]->[リンカー]->[一般]->[追加のライブラリディレクトリ]

また、libzmq.libをに追加します

[プロジェクト]->[プロパティ]->[リンカー]->[入力]->[追加の依存関係]

面白いことに、プロジェクトにlibzmq.dllのコピーが必要です。そうしないと、プロジェクトを実行すると、デバッガーが「libzmq.dllが見つかりません」というメッセージを表示します。まだ回避策を探しています。

注:これは、VisualStudio2010でzmqコードを実行するために使用したものです。VS2008でも機能するはずです。

于 2011-11-25T04:34:40.517 に答える
2

プロジェクトに具象ライブラリも追加したことについては言及していません。VSにlibパスのみを通知するだけでは不十分であることに注意してください。ただし、lib自体もプロジェクトに追加する必要があります。現在、Visual Studioは手元にありませんが、このオプションはプロジェクトのリンカー設定にあります。そこで、リンクしたいすべてのライブラリについて言及できます。

于 2011-08-03T19:14:53.490 に答える