编译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
相关产品推荐
相关产品推荐

