You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译paho.mqtt.cpp示例代码时出现链接器错误该如何解决

你遇到的是链接阶段符号未找到错误,原因是编译示例时未正确关联paho.mqtt.cpp及其依赖的底层paho.mqtt.c库,以下是可直接落地的修复步骤:

步骤1:确认依赖库已正确编译安装

paho.mqtt.cpp是对C版paho.mqtt库的C封装,必须先完成C库的编译安装,再编译C库:

  • 编译安装paho.mqtt.c时,保持默认异步功能开启,若需要websocket支持需额外添加-DPAHO_WITH_WEBSOCKET=ON编译参数,安装完成后执行sudo ldconfig刷新系统库缓存
  • 编译安装paho.mqtt.cpp时,若C库安装在自定义路径,需添加-DCMAKE_PREFIX_PATH=你的C库安装路径参数确保CMake能找到依赖

步骤2:正确编译项目内置示例

不要直接对samples目录执行cmake命令,正确操作是在项目根目录编译,自动关联依赖:

# 进入paho.mqtt.cpp根目录
cd paho.mqtt.cpp
# 新建build目录隔离编译产物
mkdir build && cd build
# 配置编译参数,开启示例编译选项
cmake .. -DPAHO_BUILD_SAMPLES=ON
# 执行编译
make -j$(nproc)
# 可选:安装库到系统路径
sudo make install
sudo ldconfig

编译完成后所有示例可执行文件会生成在build/src/samples目录下。

步骤3:如果你是单独编译自己的MQTT代码

需在自己的CMakeLists.txt中显式添加链接逻辑,示例如下:

cmake_minimum_required(VERSION 3.10)
project(mqtt_demo)

find_package(PahoMqttCpp REQUIRED)

add_executable(ws_publish ws_publish.cpp)
target_link_libraries(ws_publish PahoMqttCpp::paho-mqttpp3)

常见避坑说明

  • 不要混用不同C++ ABI版本的库,gcc 5及以上版本编译时不要手动加-D_GLIBCXX_USE_CXX11_ABI=0参数,否则会出现__cxx11前缀的符号匹配错误
  • 编译websocket相关示例前,确认paho.mqtt.c编译时已开启websocket支持

内容的提问来源于stack exchange,提问作者xBullet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:54:02