2017-12-29 4 views
-2

내가 내 리눅스 민트 18.2 컴퓨터에 설치하기 위해 노력하고있어 ZeroMQ제대로

사용하여 네트워크 프로그래밍 함께 놀러 할 ZeroMQ/0mq/ØMQ를 설치할 수 없습니다. 어쩌면 나는 단지 바보 일 뿐이므로 (도움을 청하기 위해 여기에 오는 이유) 그러나 나는 이걸 얻을 수 없다. instructions.

는 주로 하이퍼 링크 지침에서,이 다음은 자유로운 선택이있는 경우

는 UNIX 계열 시스템

에 구축하기 위해, ZeroMQ와 개발을위한 가장 편안한 OS는 우분투는 아마입니다.

  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의 타볼을 사용하십시오.

은 (예에서/C++를) 나는 0mq에서 안녕하세요 세계 예제를 사용, 테스트하려면 : 내가 찾을 수 없기 때문에

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

내가 ++ g을 사용하여 hwclient.cpp를 컴파일하려고하지만 오류의 무리를 얻을, 나는 가정 내 시스템의 어느 곳에서나 zmq.hpp이 포함되어 있습니다 (locate 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 코드 : 나는 zmq.hpp가 설치되지 않는 이유를 알아 내기 위해 노력하고있어

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

.

내가 잘못하고있는 것에 대해 조언 해 줄 수있는 사람이 있습니까?

감사합니다. 주석을 통해 설명하고있는 바와 같이

+0

컴파일에 사용한 명령은 무엇입니까? –

+0

@ParakramMajumdar 그냥 g ++ hwclient.cpp –

+1

시도 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 ++의 맨 페이지에는 표시되지 않습니다. –