【问题标题】:How to Correctly Install ZMQ?如何正确安装 ZMQ?
【发布时间】:2021-11-15 04:19:26
【问题描述】:

当我尝试运行这个简单的程序时 (https://zeromq.org/get-started/?language=cpp&library=zmqpp#)

#include <zmqpp/zmqpp.hpp>
#include <string>
#include <iostream>
#include <chrono>
#include <thread>

using namespace std;

int main(int argc, char *argv[]) {
  const string endpoint = "tcp://*:5555";

  // initialize the 0MQ context
  zmqpp::context context;

  // generate a pull socket
  zmqpp::socket_type type = zmqpp::socket_type::reply;
  zmqpp::socket socket (context, type);

  // bind to the socket
  socket.bind(endpoint);
  while (1) {
    // receive the message
    zmqpp::message message;
    // decompose the message 
    socket.receive(message);
    string text;
    message >> text;

    //Do some 'work'
    std::this_thread::sleep_for(std::chrono::seconds(1));
    cout << "Received Hello" << endl;
    socket.send("World");
  }
}

我收到此错误:

master/pubSub/pub.cpp:3:10: fatal error: 'zmqpp/zmqpp.hpp' file not found
#include <zmqpp/zmqpp.hpp>

Error Message

我也明白了:

Uncaught TypeError: Callback must be a function. Received undefined

fs.js:135

Error Message 2

显然,这似乎是因为我没有正确安装 ZMQ。我尝试了两种安装方式:

方法一失败:

  1. 已安装 Homebrew (https://brew.sh/)
  2. 然后在终端:brew install zmq

方法 #2 失败

  1. 已下载 cppzmq zip 文件 (https://github.com/zeromq/cppzmq)。解压这个名为 cppzmq-master 的文件
  2. 已下载 Cmake
  3. 在终端中安装了 Cmake:brew install cmake
  4. 在终端中,将目录更改为 cppzmq-master
  5. mkdir 构建
  6. cd 构建
  7. cmake ..
  8. sudo make -j4 安装

不知道我哪里出错了;对此仍然很陌生,因此非常感谢您的反馈!

ZMQ网站供参考:https://zeromq.org/

来源

【问题讨论】:

  • 你的 cmake 文件中有 find_package(ZeroMQ REQUIRED) 吗?然后target_link_libraries给它添加一个依赖?
  • @Cory Kramer 我没有。请原谅我的经验不足,但是我需要为此使用哪个 Cmake 文件? Cmake 目标文件?还是别的什么?
  • 是的,您在代码目录的根目录下创建了一个CMakeLists.txt 文件,它指定了您的源文件等。您现在如何构建,Visual Studio、gcc、makefile 等?
  • 它可能是您在应用程序代码根文件夹中的 CMakeLists.txt 文件。如果您没有使用 CMake 为您的应用程序生成项目文件或 makefile,您将不得不解释您是如何构建的。您可能需要为编译器设置包含目录并手动将库添加到链接器设置中。
  • @CoryKramer 我正在使用 Atom 和一个附加组件构建,它允许我通过右键单击并选择“编译并运行”来使用 g++ 自动编译和运行终端。我去了 CMakeLists.txt 文件,我认为(我可能错了)你前面提到的行在那里。这里有什么建议吗?

标签: c++ cmake zeromq pyzmq czmq


【解决方案1】:

您的问题的一个问题是您询问如何安装库,但没有提示您要安装它的位置。视窗? Linux?苹果系统? *BSD?哪个版本?如果是 Linux,它使用什么包管理器系统?

所以我会告诉你我是如何编译和运行你的程序的

  1. 打开一个 GUI 包安装程序并搜索“zmq”。我找到并安装了zmqpp,与您的包含文件的名称一致。我也有几个相关的包,很可能是作为依赖安装的

    我不确定它们是否真的都是必要的。顺便说一句,我使用 Manjaro Linux 和基于 Arch 的打包系统。

  2. (可选步骤)检查您包含的头文件是否在预期位置

    > find /usr/include -name "zmqpp.hpp"
    /usr/include/zmqpp/zmqpp.hpp
    

    是的

  3. (可选)检查二进制文件是否位于它们应该在的位置

    > find /usr/lib -name "libzmq*.*"
    /usr/lib/libzmqpp.so.4
    /usr/lib/libzmq.a
    /usr/lib/libzmqpp.so
    /usr/lib/libzmq.so.5.2.4
    /usr/lib/libzmqpp.so.4.1.2
    /usr/lib/libzmq.so
    /usr/lib/libzmq.so.5
    

    只有 *.so*.a 是相关的。我可以看到库分为两部分,libmzqlibzmqpp。我猜前者用于 C 绑定,而后者用于 C++ 绑定。

  4. 尝试从命令行编译你的程序:

    > g++ main.cpp -lzmq -lzmqpp
    

    没有错误,编译器已经找到并解决了所有依赖项。

  5. 如果你想要一个 Cmake 脚本 (CMakeLists.txt) 来做同样的事情,这里是:

    cmake_minimum_required(VERSION 3.10) # earlier versions are also likely to work 
    project(sandbox VERSION 1.0 DESCRIPTION "sandbox" LANGUAGES CXX)
    set(CMAKE_CXX_STANDARD 20)  # optional
    add_executable(sandbox main.cpp)
    target_link_libraries(sandbox PUBLIC zmq zmqpp)
    

【讨论】:

    猜你喜欢
    • 2015-11-23
    • 2014-10-22
    • 2011-10-11
    • 2014-09-16
    • 2021-01-17
    • 2011-08-19
    • 2016-12-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多