ubuntu server 18.04 安装zmq

news/2025/2/28 14:13:20/

安装依赖

sudo apt-get install libtool pkg-config build-essential autoconf automake

编译安装ZMQ使用的加密库

sudo wget https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
sudo tar -zxvf LATEST.tar.gz
cd libsodium-stable
./configure
make
make check
sudo make install

编译安装libzmq(去官网抄袭)

echo "deb http://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/ ./" >> /etc/apt/sources.list
wget https://download.opensuse.org/repositories/network:/messaging:/zeromq:/release-stable/Debian_9.0/Release.key -O- | sudo apt-key add
apt-get install libzmq3-dev

ubuntu 18.04 遇到问题

error: ‘zmq::send_flags’ has not been declared

参考一些文章

How to address the problme: “build error: ‘zmq::recv_flags’ has not been declared“_Drscq的博客-CSDN博客

waf build error: ‘zmq::recv_flags’ has not been declared · Issue #33 · tkn-tub/ns3-gym · GitHub

用以下方法解决

sudo apt-add-repository "deb http://in.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse"
sudo apt-add-repository "deb-src http://in.archive.ubuntu.com/ubuntu/ focal-updates main restricted universe multiverse"
sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu focal main universe restricted multiverse"
sudo apt-add-repository "deb-src http://archive.ubuntu.com/ubuntu focal restricted universe multiverse main"
sudo apt-get update
sudo apt-get install libzmq3-dev

官方代码和构建命令

//  server.cpp
//  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>
#ifndef _WIN32
#include <unistd.h>
#else
#include <windows.h>#define sleep(n)	Sleep(n)
#endifint main () {//  Prepare our context and socketzmq::context_t context (2);zmq::socket_t socket (context, zmq::socket_type::rep);socket.bind ("tcp://*:5555");while (true) {zmq::message_t request;//  Wait for next request from clientsocket.recv (request, zmq::recv_flags::none);std::cout << "Received Hello" << std::endl;//  Do some 'work'sleep(1);//  Send reply back to clientzmq::message_t reply (5);memcpy (reply.data (), "World", 5);socket.send (reply, zmq::send_flags::none);}return 0;
}
//  client.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 socketzmq::context_t context (1);zmq::socket_t socket (context, zmq::socket_type::req);std::cout << "Connecting to hello world server..." << std::endl;socket.connect ("tcp://localhost:5555");//  Do 10 requests, waiting each time for a responsefor (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, zmq::send_flags::none);//  Get the reply.zmq::message_t reply;socket.recv (reply, zmq::recv_flags::none);std::cout << "Received World " << request_nbr << std::endl;}return 0;
}
g++ server.cpp -lzmq -o server
g++ client.cpp -lzmq -o client

完全照搬这篇文章也没问题

Linux下ZMQ的安装_zmq安装_Coder个人博客的博客-CSDN博客

使用cmake
 

cmake_minimum_required(VERSION 3.14.1)project(onlineapp)if(CMAKE_COMPILER_IS_GNUCC)message("COMPILER IS GNUCC")ADD_DEFINITIONS ( -std=c++11 )
endif(CMAKE_COMPILER_IS_GNUCC)SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -ggdb3")
#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")# 5. 添加头文件路径
# include_directories(${CMAKE_CURRENT_SOURCE_DIR}/inc)
# include_directories(${CMAKE_SOURCE_DIR}/include)
# include_directories(${CMAKE_SOURCE_DIR}/soc_com_mgr/inc)
# 6. 添加源文件
FILE(GLOB_RECURSE SOURCE_FILES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp)
message(${CMAKE_CURRENT_SOURCE_DIR})
message(${SOURCE_FILES})
# 7. 添加链接库
find_package(cppzmq)# 9. 设置环境变量,编译用到的源文件全部都要放到这里,否则编译能够通过,
#但是执行的时候会出现各种问题,比如"symbol lookup error xxxxx , undefined symbol"
SET(ALL_SRCS ${SOURCE_FILES})
message(${ALL_SRCS})# 10.add executable file,添加要编译的可执行文件
ADD_EXECUTABLE(server server.cpp)
ADD_EXECUTABLE(client client.cpp)# 不可以
#TARGET_LINK_LIBRARIES(${CMAKE_BINARY_DIR}/module/libmodule.so)
target_link_libraries(server cppzmq)
target_link_libraries(client cppzmq)


http://www.ppmy.cn/news/86315.html

相关文章

C++ 11 lock_guard 和 unique_lock

文章目录 前言一、简介1.1 lock_guard1.2 RAII1.3 原理 二、unique_lock2.1 简介2.2 使用2.3 原理 三、 lock_guard 和 unique_lock比较3.1 锁的管理方式3.2 灵活性3.3 可移动性 总结 前言 最近在写C程序&#xff0c;需要用到 lock_guard &#xff0c;并记录 C11新特性 lock_g…

极米科技发布新一代光源技术,投影行业要变天?

作者&#xff1a;坚白 2018年以来&#xff0c;在年轻人群的追捧下&#xff0c;此前主要应用于商用场景的投影仪&#xff0c;逐渐切换到家用场景&#xff0c;而且随着投影技术的持续改进&#xff0c;投影效果也不断提升&#xff0c;家用投影市场进入高速发展期。 但进入2022年…

如何在华为OD机试中获得满分?Java实现【数字颠倒】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

c++小游戏——谷歌小恐龙

请用Dev-cpp6.5或专业C程序&#xff0c;否则不可运行。 #include <iostream> #include <conio.h> #include <ctime> #include <chrono> #include <thread> #include <Windows.h> using namespace std; // 游戏画面宽度和高度 const int…

考研考公太卷了,出国留学能弯道超车吗?

这届年轻人太难了&#xff01; 国内高考人数越来越多&#xff0c;考上好大学的难度很大。2022年&#xff0c;高考报名人数是1193万&#xff0c;但考上本科的只有466万&#xff0c;考上双一流大学的不足50万&#xff0c;上双一流大学考生的比例不到5%。 高考只是卷的开始&…

java中collection的循环遍历

package com.test.Test01;import java.util.*;public class Test02 {//这是一个main方法&#xff0c;是程序的入口public static void main(String[] args) {Collection col new ArrayList();//调用方法//集合有一个特点&#xff1a;只能存放引用数据类型的数据&#xff0c;不…

2023年认证杯SPSSPRO杯数学建模D题(第一阶段)立体车库的自动调度问题全过程文档及程序

2023年认证杯SPSSPRO杯数学建模 D题 立体车库的自动调度问题 原题再现&#xff1a; 随着人们生活水平的提高&#xff0c;汽车保有量日益增加&#xff0c;而城市土地资源有限&#xff0c;传统平面停车场土地面积利用率低, 这样便形成了交通拥挤、停车困难的现象。为解决该问题…

分析Google Play谷歌应用市场是如何检测APP/APK/AAB之间g关联和相似性的

Google Play&#xff0c;作为全球最大的 Android 应用市场&#xff0c;每天都有无数的新应用上传。在这个过程中&#xff0c;确保新上传的应用不是现有应用的复制版本是至关重要的。这就引出了一个问题&#xff1a;Google Play 是如何检测应用之间的相似性的&#xff1f; 本文…