I'm just starting to learn how to work with zeromq libraries and using them in different C++ projects. The sample code that I wrote (actually copied from there tutorials)is this:
// file: main.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; }
and by building the output of this file with the command below:
g++ main.cpp -o test -lzmq
the file will be generated with no problem.
The problem that I have is that I want to build the file using CMake.Thus, I've written a CMakeLists.txt
file as below:
cmake_minimum_required(VERSION 3.6) project(test2) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -lzmq") set(SOURCE_FILES main.cpp) add_executable(test2 ${SOURCE_FILES})
The part that I thought will be enough to build the program is -lzmq
but even with that piece included, I get the following error messages:
CMakeFiles/test2.dir/main.cpp.o: In function `zmq::error_t::error_t()': /usr/include/zmq.hpp:62: undefined reference to `zmq_errno' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::error_t::what() const': /usr/include/zmq.hpp:66: undefined reference to `zmq_strerror' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::message_t::message_t()': /usr/include/zmq.hpp:107: undefined reference to `zmq_msg_init' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::message_t::message_t(unsigned long)': /usr/include/zmq.hpp:114: undefined reference to `zmq_msg_init_size' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::message_t::~message_t()': /usr/include/zmq.hpp:129: undefined reference to `zmq_msg_close' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::message_t::data()': /usr/include/zmq.hpp:180: undefined reference to `zmq_msg_data' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::context_t::context_t(int)': /usr/include/zmq.hpp:204: undefined reference to `zmq_init' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::context_t::~context_t()': /usr/include/zmq.hpp:225: undefined reference to `zmq_term' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::socket_t::socket_t(zmq::context_t&, int)': /usr/include/zmq.hpp:251: undefined reference to `zmq_socket' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::socket_t::close()': /usr/include/zmq.hpp:283: undefined reference to `zmq_close' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::socket_t::connect(char const*)': /usr/include/zmq.hpp:314: undefined reference to `zmq_connect' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::socket_t::send(zmq::message_t&, int)': /usr/include/zmq.hpp:321: undefined reference to `zmq_send' /usr/include/zmq.hpp:324: undefined reference to `zmq_errno' CMakeFiles/test2.dir/main.cpp.o: In function `zmq::socket_t::recv(zmq::message_t*, int)': /usr/include/zmq.hpp:331: undefined reference to `zmq_recv' /usr/include/zmq.hpp:334: undefined reference to `zmq_errno'
Should I set another kind of variable in the CMake file or have I installed the library in a wrong directory? or is there anything else that I should have mentioned? and The system witch I'm working on is Ubuntu 14.04