竞猜排行 / 2025-11-04 00:58:33

本文介绍不带 SSL/TLS(通常指 HTTPS 的协议加密层),不带 CJSON,带 pthread 的情况下编译 mosquitto;

CMakeLists.txt 脚本的修改

从 官网 下载 mosquitto 源码,并解压

根据下面的描述修改 CMakeLists.txt 脚本

屏蔽 TLS

1

2

+ set (WITH_TLS OFF)

if (WITH_TLS)

屏蔽 CJSON

1

2

3

4

- FIND_PACKAGE(cJSON)

+ #FIND_PACKAGE(cJSON)

+ set (CJSON_FOUND OFF)

if (CJSON_FOUND)

屏蔽 CLIENTS

Windows 平台编译 client_shared.c 会报错(可能是 VS2019 的 CMake 工程对某些写法不支持的原因),所以设置不生成 clients;

1

2

+ set (WITH_CLIENTS OFF)

if (WITH_CLIENTS)

屏蔽 DOCUMENTATION

屏蔽 TLS 后 Linux 平台生成文档会卡住,所以设置不生成文档;

1

2

+ set (DOCUMENTATION OFF)

if (DOCUMENTATION)

多平台编译库文件

Windows 平台

安装 pthreads-w32 库

在 这里 下载最新版本 pthreads-w32-2-9-1-release.zip,解压后拷贝 pthreads-w32-2-9-1-release 目录到 C 盘,并重命名为 pthreads;

确保 CMakeLists.txt 脚本中 WIN32 的 pthread 库路径能正常找到;

解决 pthreads-w32 的 timespec 和 Windows SDK 重定义的问题

修改 C:\pthreads\Pre-built.2\include\pthread.h 文件:

1

2

3

#if !defined( PTHREAD_H )

#define PTHREAD_H

+ #define HAVE_STRUCT_TIMESPEC

VS2019 CMake 工程编译

使用 VS2019 打开 mosquitto 目录下的 CMakeLists.txt;

会在工程目录下多出 .vs 和 out 目录;

等待 cmake 缓存构建完成后,“生成” –> “全部生成”;

C 库文件在 lib 目录,CPP 库文件在 lib/cpp 目录;

Linux 平台

按如下步骤编译:

1

2

3

4

mkdir build

cd build

cmake ..

make

C 库文件在 lib 目录,CPP 库文件在 lib/cpp 目录;

arm32 平台

修改 CMakeLists.txt,设置交叉编译器:

建议紧接着 project(xxx) 后面,即下一行;

1

2

set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)

set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)

启动编译

1

2

3

4

mkdir build

cd build

cmake ..

make

C 库文件在 lib 目录,CPP 库文件在 lib/cpp 目录;

Previous

使用 zsh 一个更好用的终端

Next

编译和使用 gdb

弘一法师说:“止语,是上等智慧;止心,是上等修行,就是不断调整自己”
turbo c最新安装包下载-turbo c中文版下载-turbo c版本大全