【问题标题】:How to install the C++ binding for ZeroMQ on Mac OS X?如何在 Mac OS X 上为 ZeroMQ 安装 C++ 绑定?
【发布时间】:2013-04-17 10:18:49
【问题描述】:

开启

g++ actualApp.cpp -lzmq 

我明白了

actualApp.cpp:6:19: error: zmq.hpp: No such file or directory
actualApp.cpp: In function ‘int main()’:
actualApp.cpp:13: error: ‘zmq’ has not been declared
actualApp.cpp:13: error: expected `;' before ‘context’
actualApp.cpp:14: error: ‘zmq’ has not been declared
actualApp.cpp:14: error: expected `;' before ‘socket’
actualApp.cpp:15: error: ‘socket’ was not declared in this scope
actualApp.cpp:18: error: ‘zmq’ has not been declared
actualApp.cpp:18: error: expected `;' before ‘request’
actualApp.cpp:21: error: ‘request’ was not declared in this scope
actualApp.cpp:28: error: ‘zmq’ has not been declared
actualApp.cpp:28: error: expected `;' before ‘reply’
actualApp.cpp:29: error: ‘reply’ was not declared in this scope
actualApp.cpp: At global scope:
actualApp.cpp:33: error: expected constructor, destructor, or type conversion at end of input

为

//
//  Hello World server in C++
//  Binds REP socket to tcp://*:5555
//  Expects "Hello" from client, replies with "World"
//
#include <zmq.hpp>
#include <string>
#include <iostream>
#include <unistd.h>

int main () {
    //  Prepare our context and socket
    zmq::context_t context (1);
    zmq::socket_t socket (context, ZMQ_REP);
    socket.bind ("tcp://*:5555");

    while (true) {
        zmq::message_t request;

        //  Wait for next request from client
        socket.recv (&request);
        std::cout << "Received Hello" << std::endl;

        //  Do some 'work'
        sleep (1);

        //  Send reply back to client
        zmq::message_t reply (5);
        memcpy ((void *) reply.data (), "World", 5);
        socket.send (reply);
    }
    return 0;
}

我已经像这样在 Mac OS X 上安装了 zeromq - ./configure、make、make install。

我可以使用 -lzmq 标志编译 C 示例而不会出错。

我应该如何使用来自https://github.com/zeromq/cppzmq 的这个 C++ .hpp 标头?

【问题讨论】:

  • 如何编译c++代码?
  • 我做了这样的 C - gcc actualApp.c -lzmq
  • 我正在尝试 c++ - g++ actualApp.cpp -lzmq

标签: c++ macos zeromq


【解决方案1】:

我将文件 zmq.hpp 移动到 /usr/local/include 那里 zmq.h 也在那里

【讨论】:

    【解决方案2】:

    我应该如何使用这个 .hpp https://github.com/zeromq/cppzmq 文件?

    1. 从上述链接下载 CPP 绑定(即 zmq.hpp 头文件)。
    2. 确保在编译时包含此头文件。例如:g++ yourfile.cpp -I(zmq.hpp 的路径) -lzmq

    【讨论】:

    • 为什么 .hpp 标头不包含在 tarball 中?
    【解决方案3】:

    如果 libzmq.so 在另一个文件夹中,您没有提供包含文件和 lib 文件夹的路径。你需要使用

    g++ actualApp.cpp -I$(Path to ZMQ include files) -L$(Path to ZMQ library files) -lzmq

    您可能还想提供-o outFileName,除非您希望将您的可执行文件命名为a.out

    【讨论】:

    • 我将头文件和源文件都移到了 /usr/local/include ,但它仍然显示“致命错误:没有这样的文件或目录”:g++ asyncserver.cpp -std=c++11 -I/usr/local/include -L/usr/local/include -lzmq -o asyncserver
    【解决方案4】:

    我使用 Homebrew (2.1.11) 和 Xcode (10.3) 的食谱。

    第 1 步

    从 Homebrew 安装 ZMQ (4.3.2)

    brew install zeromq
    
    

    第 2 步

    从 GitHub 克隆 cppzmq

    git clone https://github.com/zeromq/cppzmq.git
    

    第 3 步:可选

    构建和测试 cppzmq。

    cd /path/to/cppzmq
    ./ci_build.sh
    

    第 4 步

    设置 Xcode 项目。

    1. 复制cppzmp/zmq.hpp到/usr/local/include
    2. 将/usr/local/include 添加到Header Search Path 的Build Settings
    3. 找出正确的标志:pkg-config --libs libzmq。将结果放入Build Settings 的Other Linker Flags
    4. 将#include &lt;zmq.hpp&gt; 添加到您的源文件中。
    5. 构建您的 Xcode 项目。

    【讨论】:

      【解决方案5】:

      将 /usr/local/include 添加到您的搜索路径

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-15
        • 2014-11-29
        • 2011-04-10
        • 2012-07-27
        • 2012-03-01
        • 2013-04-01
        相关资源
        最近更新 更多