VS2017平臺編譯 zmq-4.2.5 過程
目的
為了能夠在windows平臺使用zmq進行通訊,因此需要編譯一個可用的zmq的dll
說明
libzmq是c++語言開發的,正式版本在這裡:
https://github.com/zeromq/libzmq/releases
到這篇檔案釋出為止,正式穩定版是libzmq 4.3.1, 而本文僅適用4.2.5作為示範
zmq編譯
- 按照給出的連結下載zeromq-4.2.5.zip檔案。
- 解壓到D:\zeromq資料夾中,
- 用vs2017開啟工程檔案:”D:\zeromq\zeromq-4.2.5\builds\msvc\vs2015\libzmq.sln”
- 提示升級,選擇確定即可(工程自動升級到vs2017)
- 編譯,最後提示7個專案中有6個沒有成功編譯。
在gitHub上找到答案,分析visualstudio的sln檔案早期是由cmake生成的,用vs編譯不完美,路徑引用不正確。解決方案是:開啟工程資料夾下的libzmq.import.props檔案,這5個紅線處,都去掉一串“…\libzmq”,同時需要把專案名稱修改為libzmq,變成這樣:
6,儲存。重新開啟工程編譯,pass.
另外,git clone最新的開發版:
https://github.com/zeromq/libzmq
用vs2015直接編譯並沒有出現上面的問題。
開個新win32_console工程試驗一下:
-
c/c++額外的庫包含路徑新增:
-
連結器-額外的庫包含路徑新增:
-
連結器-輸入-依賴項新增:
-
編譯,pass,
-
將”D:\zeromq\zeromq-4.2.5\bin\Win32\Debug\v140\dynamic\libzmq.dll”複製到生成的exe檔案所在路徑,執行,pass!
使用範例
Server端:
#include <stdio.h>
#include <string.h>
#include <assert.h>
int main(void)
{
// Socket to talk to clients
void *context = zmq_ctx_new();
void *responder = zmq_socket(context, ZMQ_REP);
int rc = zmq_bind(responder, "tcp://*:6666");
assert(rc == 0);
while (1) {
char buffer[100000] = {'\0'};
zmq_recv(responder, buffer, 100000, 0);
printf("Received: %s\n", buffer);
//sleep(1); // Do some 'work'
zmq_send(responder, "World", 5, 0);
}
return 0;
}
client端:
#include<iostream>
#include "zmq.h"
#include <assert.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>
using namespace std;
#pragma comment(lib, "libzmq.lib")
int main(int argc, char const *argv[]) {
void *context = zmq_ctx_new();
void *requester = zmq_socket(context, ZMQ_REQ);
/* 這裡連線的地址需要更換成自己要連線伺服器的地址 */
int rc = zmq_connect(requester, "tcp://127.0.0.1:6666");
assert(rc == 0);
char buf[100] = { '\0' };
FILE* fp = NULL;
fopen_s(&fp, "1.txt", "ab+");
if (NULL != fp)
{
fread(buf, 1, 100, fp);
}
fclose(fp);
int a, b, c;
zmq_version(&a, &b, &c);
cout << "zmq-version" << a << "-" << b << "-" << c << endl;
for (int i = 0; i < 1; i++) {
printf("sending msg\n");
rc = zmq_send(requester, buf, 100, 0);
assert(rc > 0);
/* 接受回應 */
char buf[10];
memset(buf, 0, 10);
zmq_recv(requester, buf, 10, 0);
printf("recv: %s\n", buf);
}
return 0;
}
相關文章
- 方舟編譯器開源,華為自家開源平臺面世!(附編譯過程)編譯
- 編譯過程編譯
- 跨平臺編譯編譯
- 編譯連結過程編譯
- C++ 編譯過程C++編譯
- 編譯過程簡介編譯
- ollvm在VS2017下編譯LVM編譯
- ios底層 編譯過程iOS編譯
- 痛苦的過程,編譯glomap編譯
- GCC編譯過程(預處理->編譯->彙編->連結)GC編譯
- Go跨平臺交叉編譯Go編譯
- JavaScript的預編譯過程分析JavaScript編譯
- GCC編譯和連結過程GC編譯
- 預編譯過程(AO+GO)編譯Go
- 詳解Linux 程式編譯過程Linux編譯
- go語言編譯過程概述Go編譯
- 利用VS2017編譯、除錯Linux程式編譯除錯Linux
- .NET探索平臺條件編譯編譯
- [轉]:xmake編譯配置過程詳解編譯
- 3- C語言編譯過程C語言編譯
- Ubuntu20.04linux核心(5.4.0版本)編譯準備與實現過程-編譯過程(2)UbuntuLinux編譯
- vue原理:diff、模板編譯、渲染過程等Vue編譯
- 編譯原理入門篇|一篇文章理解編譯全過程編譯原理
- Windows10 VS2017 C++編譯Linux程式WindowsC++編譯Linux
- ffmpeg iOS平臺編譯 指令碼註釋iOS編譯指令碼
- 編譯OpenCV——ubuntu x86_64平臺編譯OpenCVUbuntu
- Golang在各平臺下如何交叉編譯Golang編譯
- 深入wepy原始碼:wpy檔案編譯過程原始碼編譯
- Linux 程式編譯過程的來龍去脈Linux編譯
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- Hive SQL的底層編譯過程詳解HiveSQL編譯
- Windows平臺使用CMake+MinGW64編譯OpenCVWindows編譯OpenCV
- 使用CMake命令編譯Android平臺下的包編譯Android
- C語言的編譯連結執行過程C語言編譯
- MDK編譯過程及檔案型別全解編譯型別
- C語言編譯和連結過程簡介C語言編譯
- cesium原始碼編譯除錯及呼叫全過程原始碼編譯除錯
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯