0

C++ プロジェクトで zmq を使用しようとしています。簡単な例を作成したいとき、私はかなり混乱しています。

そのために、VisualC++ 2010 の .sln を使用して libzmq v3.2.3 を個別にビルドしました。次に、zmq.hpp をダウンロードして含めました。この例は、zmq ガイドの最初のものです。

//
//  Hello World server in C++
//  Binds REP socket to tcp://*:5555
//  Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <unistd.h>

int main () {
//  Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");

while (true) {
    zmq::message_t request;

    //  Wait for next request from client
    socket.recv (&request);
    std::cout << "Received Hello" << std::endl;

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

    //  Send reply back to client
    zmq::message_t reply (5);
    memcpy ((void *) reply.data (), "World", 5);
    socket.send (reply);
}
return 0;
}

コンパイルは問題ありませんが、リンケージはそうではありません: 次のようなエラーが発生します:

error LNK2019: external symbol unresolved __imp__zmq_term refrenced in function "public: void __thiscall zmq::context_t::close(void)" (?close@context_t@zmq@@QAEXXZ)

zmq へのパスは問題ないようです。VC++ が zmq.hpp 内の小さなメソッドのコードを見つけられない理由がわかりません

私が何をするのを忘れたかわかりますか?

編集: 出力ウィンドウの内容は次のとおりです (申し訳ありませんが、これはフランス語版ですが、かなり似ていると思います)。

1>------ Début de la génération : Projet : libzmq, Configuration : Debug Win32 ------
1>          1 fichier(s) copié(s).
1>  libzmq.vcxproj -> <...>\..\Ouptut\Debug\libzmq_d.lib
2>------ Début de la génération : Projet : HelloServeur, Configuration : Debug Win32 ------
2>  HelloServeur.cpp
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_init référencé dans la fonction "public: __thiscall zmq::context_t::context_t(int)" (??0context_t@zmq@@QAE@H@Z)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_errno référencé dans la fonction "public: __thiscall zmq::error_t::error_t(void)" (??0error_t@zmq@@QAE@XZ)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_strerror référencé dans la fonction "public: virtual char const * __thiscall zmq::error_t::what(void)const " (?what@error_t@zmq@@UBEPBDXZ)
2>HelloServeur.obj : error LNK2019: symbole externe non résolu __imp__zmq_term référencé dans la fonction "public: void __thiscall zmq::context_t::close(void)" (?close@context_t@zmq@@QAEXXZ)
2><...>\..\Ouptut\Debug\HelloServeur.exe : fatal error LNK1120: 4 externes non résolus
========== Génération : 1 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
4

3 に答える 3

1

スタティック ライブラリを使用している場合は、.lib をリンカー設定のリンカー | の下に追加する必要があります。入力| プロジェクト設定の追加の依存関係。

于 2013-07-08T10:43:54.037 に答える
0

わかりました、理由がわかりました。libzmq の vcxproj で、静的ライブラリと動的ライブラリのコンパイルが混在していました。適切なプロジェクトを回復した後は、すべて問題ありません。助けてくれてありがとう

于 2013-07-11T12:58:12.963 に答える