2017-12-29 13 views
-2

私は私のLinuxミント18.2マシンにインストールしようとしていZeroMQが正しく

使用してネットワークプログラミングで遊んしたいZeroMQ/0mq /ØMQをインストールすることはできません。たぶん私はちょうど馬鹿だから(これが私がここで助けに来る理由です)、私はこれらを得ることができませんinstructions

は主にハイパーリンクされた命令から、これを次のよう:あなたは自由な選択を持っている場合は

はUNIXライクなシステムに

を構築するには、ZeroMQを開発するための最も快適なOSはおそらくUbuntuのです。

  1. libtool、pkg-config、build-essential、autoconf、および automakeがインストールされていることを確認してください。
  2. システムにuuid-devパッケージ、uuid/e2fsprogs RPMまたは同等のものがインストールされているかどうかを確認してください。
  3. .tar.gzソースアーカイブをアンパックします。
  4. ./configureを実行し、その後にmakeを実行します。
  5. システム全体でZeroMQをインストールするには、sudo make installを実行します。
  6. Linuxでは、ZeroMQのインストール後にsudo ldconfigを実行します。

リリース4.2.2のtarballを使用します。テストするには

、私は(例/ C++で)0mqからhello世界の例を使用:

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

私はグラムを使用してhwclient.cppをコンパイルしようとした++が、私はエラーの束を取得し、私は見つけることができないので、私は仮定私のシステムの任意の場所に付属のzmq.hpplocate zmq.hppを使用)。ここでのエラーは、次のとおりです。

/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 

と利便性のために、ここでhwclient.cppコードです:

// 
// 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; 
} 

は私がzmq.hppがインストールされなかった理由を把握しようとしています。

誰かが私が間違っている可能性についてアドバイスを提供することはできますか?

ありがとうございました。コメントの上に述べたように

+0

コンパイルにはどのようなコマンドを使用しましたか? –

+0

@ParakramMajumdar g ++ hwclient.cpp –

+1

try g ++ hwclient.cpp -lzmq –

答えて

2

は、正しいリンクパラメータを与える必要にG ++

g++ hwclient.cpp -lzmq 

説明:
G ++のコンパイルには、最後のうち、ここで、「リンク」され、段階的に動作しますあなたのファイルは、あらかじめコンパイルされた "定義"(例えば、あなたが呼び出している関数)を含む "ライブラリ"にリンクされています。

これは、ヘッダーファイルを含む「前処理」段階とは対照的です。ヘッダーファイル(ほとんどの場合)には、関数の宣言が含まれています。

かいつまん:
あなたがundefined reference toエラーが表示された場合は、リンク時にいくつかのライブラリを逃しています。

+0

/usr/includeディレクトリに存在しないzmq.hppに起因するエラー。そうじゃないの? –

+0

@MattCorby _ "それはそうではありませんか?" - 明らかにそうではありません。それは、まったく異なるエラーメッセージでした。 「zmq.hpp」は見つかりませんでした。 – user0042

+0

あなたが気にしないなら、-lzmpの各フラグが何をしているのかについての説明も得られますか?私はg ++のマンページでそれらを見ることはできません。 –