2017-12-29 5 views
-2

Ich möchte spielen, um mit Netzwerkprogrammierung mit ZeroMQKann nicht ZeroMQ/0mq/omq richtig

Ich versuche, es zu installieren auf meinem Linux Mint 18.2 Maschine installieren. Vielleicht bin ich nur dumm (weshalb ich hier um Hilfe komme), aber ich kann nicht scheinen, diese instructions Arbeit zu bekommen.

Vor allem im Anschluss an diese, von den hypervernetzte Anweisungen:

auf UNIX-ähnlichen Systemen

zu bauen, wenn Sie die freie Wahl haben, die bequemste OS mit ZeroMQ für die Entwicklung ist vermutlich Ubuntu.

  1. Stellen Sie sicher, dass libtool, pkg-config, build-essential, autoconf und auto installiert sind.
  2. Überprüfen Sie, ob UUID-DEV-Paket, UUID/E2Fsprogs RPM oder gleichwertige Ihr System installiert ist.
  3. Entpacken Sie das .tar.gz-Quellarchiv.
  4. Führen Sie ./configure aus, gefolgt von make.
  5. Um ZeroMQ systemweit zu installieren, führen Sie sudo make install aus.
  6. Führen Sie auf Linux nach der Installation von ZeroMQ sudo ldconfig aus.

Verwendung des Tarballs ab Release 4.2.2.

Um zu testen, habe ich die Hallo Welt Beispiel von 0mq (in examples/C++):

git clone --depth=1 https://github.com/imatix/zguide.git 

Ich versuchte hwclient.cpp mit g ++ zu kompilieren, aber ich ein paar Fehler zu bekommen, gehe ich davon aus, weil ich nicht finden können, das mitgelieferte zmq.hpp irgendwo auf meinem System (locate zmq.hpp) verwendet. Hier sind die Fehler:

/tmp/ccsb8olx.o: In function `zmq::error_t::error_t()': 
hwclient.cpp:(.text._ZN3zmq7error_tC2Ev[_ZN3zmq7error_tC5Ev]+0x26): undefined reference to `zmq_errno' 
/tmp/ccsb8olx.o: In function `zmq::error_t::what() const': 
hwclient.cpp:(.text._ZNK3zmq7error_t4whatEv[_ZNK3zmq7error_t4whatEv]+0x16): undefined reference to `zmq_strerror' 
/tmp/ccsb8olx.o: In function `zmq::message_t::message_t()': 
hwclient.cpp:(.text._ZN3zmq9message_tC2Ev[_ZN3zmq9message_tC5Ev]+0x23): undefined reference to `zmq_msg_init' 
/tmp/ccsb8olx.o: In function `zmq::message_t::message_t(unsigned long)': 
hwclient.cpp:(.text._ZN3zmq9message_tC2Em[_ZN3zmq9message_tC5Em]+0x2e): undefined reference to `zmq_msg_init_size' 
/tmp/ccsb8olx.o: In function `zmq::message_t::~message_t()': 
hwclient.cpp:(.text._ZN3zmq9message_tD2Ev[_ZN3zmq9message_tD5Ev]+0x14): undefined reference to `zmq_msg_close' 
/tmp/ccsb8olx.o: In function `zmq::message_t::data()': 
hwclient.cpp:(.text._ZN3zmq9message_t4dataEv[_ZN3zmq9message_t4dataEv]+0x14): undefined reference to `zmq_msg_data' 
/tmp/ccsb8olx.o: In function `zmq::context_t::context_t(int)': 
hwclient.cpp:(.text._ZN3zmq9context_tC2Ei[_ZN3zmq9context_tC5Ei]+0x18): undefined reference to `zmq_init' 
/tmp/ccsb8olx.o: In function `zmq::context_t::~context_t()': 
hwclient.cpp:(.text._ZN3zmq9context_tD2Ev[_ZN3zmq9context_tD5Ev]+0x23): undefined reference to `zmq_term' 
/tmp/ccsb8olx.o: In function `zmq::socket_t::socket_t(zmq::context_t&, int)': 
hwclient.cpp:(.text._ZN3zmq8socket_tC2ERNS_9context_tEi[_ZN3zmq8socket_tC5ERNS_9context_tEi]+0x26): undefined reference to `zmq_socket' 
/tmp/ccsb8olx.o: In function `zmq::socket_t::close()': 
hwclient.cpp:(.text._ZN3zmq8socket_t5closeEv[_ZN3zmq8socket_t5closeEv]+0x26): undefined reference to `zmq_close' 
/tmp/ccsb8olx.o: In function `zmq::socket_t::connect(char const*)': 
hwclient.cpp:(.text._ZN3zmq8socket_t7connectEPKc[_ZN3zmq8socket_t7connectEPKc]+0x25): undefined reference to `zmq_connect' 
/tmp/ccsb8olx.o: In function `zmq::socket_t::send(zmq::message_t&, int)': 
hwclient.cpp:(.text._ZN3zmq8socket_t4sendERNS_9message_tEi[_ZN3zmq8socket_t4sendERNS_9message_tEi]+0x2b): undefined reference to `zmq_send' 
hwclient.cpp:(.text._ZN3zmq8socket_t4sendERNS_9message_tEi[_ZN3zmq8socket_t4sendERNS_9message_tEi]+0x46): undefined reference to `zmq_errno' 
/tmp/ccsb8olx.o: In function `zmq::socket_t::recv(zmq::message_t*, int)': 
hwclient.cpp:(.text._ZN3zmq8socket_t4recvEPNS_9message_tEi[_ZN3zmq8socket_t4recvEPNS_9message_tEi]+0x2b): undefined reference to `zmq_recv' 
hwclient.cpp:(.text._ZN3zmq8socket_t4recvEPNS_9message_tEi[_ZN3zmq8socket_t4recvEPNS_9message_tEi]+0x46): undefined reference to `zmq_errno' 
collect2: error: ld returned 1 exit status 

Und der Einfachheit halber hier die hwclient.cpp Code ist:

// 
// Hello World client in C++ 
// Connects REQ socket to tcp://localhost:5555 
// Sends "Hello" to server, expects "World" back 
// 
#include <zmq.hpp> 
#include <string> 
#include <iostream> 

int main() 
{ 
    // Prepare our context and socket 
    zmq::context_t context (1); 
    zmq::socket_t socket (context, ZMQ_REQ); 

    std::cout << "Connecting to hello world server..." << std::endl; 
    socket.connect ("tcp://localhost:5555"); 

    // Do 10 requests, waiting each time for a response 
    for (int request_nbr = 0; request_nbr != 10; request_nbr++) { 
     zmq::message_t request (5); 
     memcpy (request.data(), "Hello", 5); 
     std::cout << "Sending Hello " << request_nbr << "..." << std::endl; 
     socket.send (request); 

     // Get the reply. 
     zmq::message_t reply; 
     socket.recv (&reply); 
     std::cout << "Received World " << request_nbr << std::endl; 
    } 
    return 0; 
} 

Ich versuche, herauszufinden, warum zmq.hpp wurde nicht installiert.

Kann mir jemand Ratschläge geben, was ich falsch machen könnte?

Danke.

+0

Welchen Befehl haben Sie zum Kompilieren verwendet? –

+0

@ParakramMajumdar nur g ++ hwclient.cpp –

+1

versuchen g ++ hwclient.cpp -lzmq –

Antwort

2

Wie in den Kommentaren diskutiert, müssen Sie die richtigen Verbindungsparameter geben, g ++

g++ hwclient.cpp -lzmq 

Erläuterung:
g ++ Kompilation arbeitet in Phasen, von denen die letzte ist „Verknüpfung“, wo Ihre Die Datei ist mit "Bibliotheken" verknüpft, die die vorkompilierten "Definitionen" enthalten (z. B. Funktionen, die Sie anrufen).

Dies steht im Gegensatz zu der Phase "Pre-processing", die das Einbeziehen von Header-Dateien behandelt.Header-Dateien enthalten (meistens) die "Deklarationen" von Funktionen.

Lange Rede kurzer Sinn:
wenn Sie undefined reference to Fehler sehen, sind Sie eine Bibliothek fehlt während der Verknüpfung.

+0

Richtig, dachte ich Fehler stammten von zmq.hpp nicht in meinem/usr/include dir. Ist das nicht der Fall? –

+0

@MattCorby _ "Ist das nicht der Fall?" _ Offensichtlich nicht. Das wäre dann eine völlig andere Fehlermeldung gewesen. Etwas wie 'Kann 'zmq.hpp'' nicht finden. – user0042

+0

Okay. Wenn es Ihnen nichts ausmacht, könnte ich auch eine Erklärung dafür bekommen, was jedes Flag in -lzmp macht? Ich sehe sie nicht in der Manpage für g ++. –