0

当我尝试运行这个简单的程序时(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>

错误信息

我也得到了这个:

Uncaught TypeError: Callback must be a function. Received undefined

fs.js:135

错误信息 2

显然,这似乎是由于我没有正确安装 ZMQ 造成的。我尝试通过两种方式安装它:

失败的方法#1:

  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. 光盘构建
  7. 制作..
  8. sudo make -j4 安装

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

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

来源

4

1 回答 1

0

您的问题的一个问题是您询问如何安装库,但没有提示您要安装它的位置。视窗?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)
    
于 2021-09-28T19:19:29.863 回答