Je rencontre un problème lors de l'utilisation de ZeroMQ dans ma nouvelle application. S'il vous plaît noter: je n'ai aucun problème à télécharger et à construire ZeroMQ lui-même. J'ai téléchargé le fichier ZIP ZeroMQ, ouvert le fichier projet/solution dans Visual Studio/C++ 2008 et construit la bibliothèque ZeroMQ très bien. Le répertoire/lib du dossier d'installation de ZeroMQ contient les fichiers .lib, .dll et autres, donc tout va bien là-bas pour autant que je sache.Problème de liaison avec ZeroMQ et Visual C++ 2008
Mon problème est que j'essaye de construire un projet simple comprenant l'exemple de serveur HelloWorld dans le guide de l'utilisateur de ZeroMQ. J'ai créé le fichier suivant appelé 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;
}
J'ai ajouté le installatiion ZeroMQ include au VC++ 2008 include_path (Propriétés-> Configuration Propriétés-> C/C++ -> Général-> supplémentaires include) et j'ai aussi ajouté le répertoire lib ZeroMQ au projet: (Propriétés-> Propriétés de configuration-> C/C++ -> Génération de code-> Bibliothèque d'exécution, DLL de mise au point multithread/MDd sélectionnée).
J'ai essayé de construire le projet. Tout compile bien Buti obtenir un tas de non résolues comme celui-ci externals lors de la liaison:
1> Liaison ... 1> helloserver.obj: LNK2019 d'erreur: symbole externe non résolu _ _zmq_term référencé imp en fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ diablotin _zmq_close référencé dans la fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_sendmsg référencé imp dans la fonction _main 1> helloserver.obj: erreur LNK2019 : symbole externe non résolu _ imp _zmq_msg_data refe renced en fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_msg_init_size référencé imp dans la fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_msg_close référencé imp en fonction _main 1 > helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_recvmsg référencé imp dans la fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_msg_init référencé imp dans la fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ imp _zm q_bind référencé dans la fonction _main 1> helloserver.obj: erreur LNK2019: symbole externe non résolu _ _zmq_socket référencé imp dans la fonction _main 1> helloserver.obj: LNK2019 d'erreur: symbole externe non résolu _ _zmq_init référencé imp en fonction _main 1> C: \ work \ visualC++ 2008 \ projets \ HelloZMQServer \ Debug \ HelloZMQServer.exe: erreur irrécupérable LNK1120: 11 externes non résolus
J'ai essayé de revenir aux paramètres de la bibliothèque de génération de code-> Runtime et j'ai essayé de changer le bibliothèque passer à? MD ou/MT mais rien n'a fonctionné, je reçois toujours ces erreurs de l'éditeur de liens.
Veuillez noter que lorsque j'ai créé helloworld.c, j'ai utilisé un projet d'application de console Windows vide, et les seules modifications que j'ai faites consistaient à ajouter les répertoires include et lib de ZeroMQ comme indiqué ci-dessus. Je n'ai modifié aucun autre paramètre de projet par défaut. Je suppose que je manque un projet quelque part.
Comment puis-je résoudre ce problème?
Veuillez également noter que j'ai construit ZeroMQ en double-cliquant sur son propre fichier de solution, donc je l'ai construit comme sa propre solution séparée. Mon projet HelloWorld est dans sa propre solution HelloWorld. Ai-je besoin de mettre la bibliothèque ZeroMQ dans la même solution que HelloWorld pour la construire correctement? Si oui, comment puis-je faire cela? – Marc
Oh, et oui j'ai déjà ajouté le chemin lib ZeroMQ à mon projet HellowOrld (Projet-> Références-> Ajouter un chemin). Je peux ajouter le chemin, mais la fenêtre Ajouter une nouvelle référence apparaît et n'a rien. – Marc
OK J'ai réussi à faire fonctionner ceci en ajoutant le projet ZeroMQ libzmq dans ma nouvelle solution HelloWorld. J'ai finalement pu voir libzmq apparaître comme une référence que je pourrais ajouter dans la fenêtre Ajouter une nouvelle référence. Il lie maintenant ok. Est-ce vraiment le cas si on crée une solution dans VC++, on doit inclure le projet de bibliothèques externes dans cette solution, avec votre propre projet utilisateur? Cela me semble un peu idiot. – Marc