- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编译一个使用 PAHO-MQTT 的简单测试应用程序。我正在运行 Antergos Linux x64。我无法编译我的项目,因为没有链接 PAHO 文件,而且我不知道如何正确链接它们。这是我要编译的 Main.cpp。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "src/MQTTAsync.h"
#include "unistd.h"
#define PUBLISHER 0
volatile MQTTAsync_token deliveredtoken;
int finished = 0;
#if PUBLISHER
#define ADDRESS "tcp://192.168.2.118:1883"
#define CLIENTID "Publisher"
#define TOPIC "test/topic"
#define PAYLOAD "Hello World!"
#define QOS 1
#define TIMEOUT 10000L
void connlost(void *context, char *cause)
{
MQTTAsync client = (MQTTAsync)context;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
int rc;
printf("\nConnection lost\n");
printf(" cause: %s\n", cause);
printf("Reconnecting\n");
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
{
printf("Failed to start connect, return code %d\n", rc);
finished = 1;
}
}
void onDisconnect(void* context, MQTTAsync_successData* response)
{
printf("Successful disconnection\n");
finished = 1;
}
void onSend(void* context, MQTTAsync_successData* response)
{
MQTTAsync client = (MQTTAsync)context;
MQTTAsync_disconnectOptions opts = MQTTAsync_disconnectOptions_initializer;
int rc;
printf("Message with token value %d delivery confirmed\n", response->token);
opts.onSuccess = onDisconnect;
opts.context = client;
if ((rc = MQTTAsync_disconnect(client, &opts)) != MQTTASYNC_SUCCESS)
{
printf("Failed to start sendMessage, return code %d\n", rc);
exit(-1);
}
}
void onConnectFailure(void* context, MQTTAsync_failureData* response)
{
printf("Connect failed, rc %d\n", response ? response->code : 0);
finished = 1;
}
void onConnect(void* context, MQTTAsync_successData* response)
{
MQTTAsync client = (MQTTAsync)context;
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int rc;
printf("Successful connection\n");
opts.onSuccess = onSend;
opts.context = client;
pubmsg.payload = (void *) PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
deliveredtoken = 0;
if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) != MQTTASYNC_SUCCESS)
{
printf("Failed to start sendMessage, return code %d\n", rc);
exit(-1);
}
}
int main(int argc, char* argv[])
{
MQTTAsync client;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
MQTTAsync_token token;
int rc;
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
MQTTAsync_setCallbacks(client, NULL, connlost, NULL, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure;
conn_opts.context = client;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS)
{
printf("Failed to start connect, return code %d\n", rc);
exit(-1);
}
printf("Waiting for publication of %s\n"
"on topic %s for client with ClientID: %s\n",
PAYLOAD, TOPIC, CLIENTID);
while (!finished)
#if defined(WIN32) || defined(WIN64)
Sleep(100);
#else
usleep(10000L);
#endif
MQTTAsync_destroy(&client);
return rc;
}
#elif PUBLISHER == 0
#define ADDRESS "tcp://192.168.2.118:1883"
#define CLIENTID "Subscriber"
#define TOPIC "test/topic"
#define PAYLOAD "Hello World!"
#define QOS 1
#define TIMEOUT 10000L
int disc_finished = 0;
int subscribed = 0;
void connlost(void *context, char *cause) {
MQTTAsync client = (MQTTAsync) context;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
int rc;
printf("\nConnection lost\n");
printf(" cause: %s\n", cause);
printf("Reconnecting\n");
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS) {
printf("Failed to start connect, return code %d\n", rc);
finished = 1;
}
}
int msgarrvd(void *context, char *topicName, int topicLen, MQTTAsync_message *message) {
int i;
char *payloadptr;
printf("Message arrived\n");
printf(" topic: %s\n", topicName);
printf(" message: ");
payloadptr = (char *) message->payload;
for (i = 0; i < message->payloadlen; i++) {
putchar(*payloadptr++);
}
putchar('\n');
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topicName);
return 1;
}
void onDisconnect(void *context, MQTTAsync_successData *response) {
printf("Successful disconnection\n");
disc_finished = 1;
}
void onSubscribe(void *context, MQTTAsync_successData *response) {
printf("Subscribe succeeded\n");
subscribed = 1;
}
void onSubscribeFailure(void *context, MQTTAsync_failureData *response) {
printf("Subscribe failed, rc %d\n", response ? response->code : 0);
finished = 1;
}
void onConnectFailure(void *context, MQTTAsync_failureData *response) {
printf("Connect failed, rc %d\n", response ? response->code : 0);
finished = 1;
}
void onConnect(void *context, MQTTAsync_successData *response) {
MQTTAsync client = (MQTTAsync) context;
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int rc;
printf("Successful connection\n");
printf("Subscribing to topic %s\nfor client %s using QoS%d\n\n"
"Press Q<Enter> to quit\n\n", TOPIC, CLIENTID, QOS);
opts.onSuccess = onSubscribe;
opts.onFailure = onSubscribeFailure;
opts.context = client;
deliveredtoken = 0;
if ((rc = MQTTAsync_subscribe(client, TOPIC, QOS, &opts)) != MQTTASYNC_SUCCESS) {
printf("Failed to start subscribe, return code %d\n", rc);
exit(-1);
}
}
int main(int argc, char *argv[]) {
MQTTAsync client;
MQTTAsync_connectOptions conn_opts = MQTTAsync_connectOptions_initializer;
MQTTAsync_disconnectOptions disc_opts = MQTTAsync_disconnectOptions_initializer;
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
MQTTAsync_token token;
int rc;
int ch;
MQTTAsync_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
MQTTAsync_setCallbacks(client, NULL, connlost, msgarrvd, NULL);
conn_opts.keepAliveInterval = 20;
conn_opts.cleansession = 1;
conn_opts.onSuccess = onConnect;
conn_opts.onFailure = onConnectFailure;
conn_opts.context = client;
if ((rc = MQTTAsync_connect(client, &conn_opts)) != MQTTASYNC_SUCCESS) {
printf("Failed to start connect, return code %d\n", rc);
exit(-1);
}
while (!subscribed)
#if defined(WIN32) || defined(WIN64)
Sleep(100);
#else
usleep(10000L);
#endif
if (finished)
goto exit;
do {
ch = getchar();
} while (ch != 'Q' && ch != 'q');
disc_opts.onSuccess = onDisconnect;
if ((rc = MQTTAsync_disconnect(client, &disc_opts)) != MQTTASYNC_SUCCESS) {
printf("Failed to start disconnect, return code %d\n", rc);
exit(-1);
}
while (!disc_finished)
#if defined(WIN32) || defined(WIN64)
Sleep(100);
#else
usleep(10000L);
#endif
exit:
MQTTAsync_destroy(&client);
return rc;
}
#endif
paho mqtt 类位于 src
目录中。在我的 CMake 中,我试图像这样链接它们:
cmake_minimum_required(VERSION 3.10)
project(MQTT)
set(CMAKE_CXX_STANDARD 11)
file(GLOB src "*.h" "*.c")
add_executable(MQTT main.cpp ${src})
尝试编译时提示如下异常:
[ 50%] Linking CXX executable MQTT
CMakeFiles/MQTT.dir/main.cpp.o: In function `connlost(user*, char*)':
/home/user/Documents/Projects/MQTT/main.cpp:161: undefined reference to `MQTTAsync_connect'
CMakeFiles/MQTT.dir/main.cpp.o: In function `msgarrvd(user*, char*, int, MQTTAsync_message*)':
/home/user/Documents/Projects/MQTT/main.cpp:181: undefined reference to `MQTTAsync_freeMessage'
/home/user/Documents/Projects/MQTT/main.cpp:182: undefined reference to `MQTTAsync_free'
CMakeFiles/MQTT.dir/main.cpp.o: In function `onConnect(user*, MQTTAsync_successData*)':
/home/user/Documents/Projects/MQTT/main.cpp:226: undefined reference to `MQTTAsync_subscribe'
CMakeFiles/MQTT.dir/main.cpp.o: In function `main':
/home/user/Documents/Projects/MQTT/main.cpp:242: undefined reference to `MQTTAsync_create'
/home/user/Documents/Projects/MQTT/main.cpp:244: undefined reference to `MQTTAsync_setCallbacks'
/home/user/Documents/Projects/MQTT/main.cpp:251: undefined reference to `MQTTAsync_connect'
/home/user/Documents/Projects/MQTT/main.cpp:271: undefined reference to `MQTTAsync_disconnect'
/home/user/Documents/Projects/MQTT/main.cpp:283: undefined reference to `MQTTAsync_destroy'
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/MQTT.dir/build.make:95: MQTT] Error 1
make[2]: *** [CMakeFiles/Makefile2:68: CMakeFiles/MQTT.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:80: CMakeFiles/MQTT.dir/rule] Error 2
make: *** [Makefile:118: MQTT] Error 2
如何正确链接所有这些文件?
最佳答案
也许您应该以这种方式包含您的.h/.hpp 文件:
set (MQTT_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/)
target_include_directories (MQTT PUBLIC
${MQTT_INCLUDE_DIR}
)
当然,如果您的 *.h 文件在另一个目录中,您应该更改第一行。
上面的第二行,应该加在add_executable
之后,因为你必须先创建MQTT
目标。
关于c++ - 链接 Paho MQTT CMake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50737937/
当我使用 paho 和 spring 框架修复应用程序中客户端的一些问题时,我发现了 spring MQTT 集成。我不确定这是否能解决我的问题,我什至不确定这是什么。 有人可以解释一下两者一起使用有
我正在尝试设置一个 mqtt 客户端,但我收到一个 ImportError: 我安装了 paho: pip install paho-mqtt 它说:成功安装 dnspython-1.15.0 pah
我的 raspberrypi 上的以下 python 代码没有连接到我的 mqtt 代理,它只是在打印 Connecting... 后挂起: import paho.mqtt.client as mq
当我通过 MQTTLens 测试发布时,它有效。然而,当我按下按钮时,它确实会触发“on_publish”,但另一端的 on_message 没有收到任何内容;它没有被触发。有两个 Raspberry
我正在使用 Java Paho MQTT 客户端库通过 MQTT 连接到服务器。 库支持使用签名证书进行身份验证和加密的 TLS/SSL。 但是,如果我只是使用用户名和密码进行身份验证(如下所示),而
我的 python paho-mqtt client无法连接到用 java 编写的代理。代理已使用 jks 类型证书启用 SSL 连接。经纪人不在我的管理范围内。 我将 jks 证书转换为 pem 证
如果连接丢失,我的 paho-mqtt 服务无法重新连接到代理。 在连接丢失时,我使用 adb shell 从 Android 客户端 ping 两个代理,并从托管 mosquito 代理的服务器 (
我在笔记本电脑上运行 MQTT Mosquitto 代理。然后我尝试将 2 个 Paho MQTT 客户端连接到它:1)使用 Java Paho 从 Android 手机和 2)使用 Python
有没有一种优雅的方法可以从代理中提取一条消息而不必: 订阅 创建一个 on_message() 接收消息 退订 我问是因为我们使用了一个包含多个字段的 json 消息。当新数据进入时,我只想更新 js
我正在使用适用于 Android 的 Paho MQTT 库,我的应用程序正在交换实时编辑数据。我想在应用程序与代理断开连接时禁用编辑文本,并在重新建立连接时启用它。 第一部分很简单,MqttCall
我正在使用 Eclipse MQTT 库 Paho,但我找不到方法来决定客户端与代理的连接何时建立。 有人知道目前是否有办法做到这一点吗? 我似乎在文档中的 MqttCallback 类中找不到任
我对 paho mqtt 库有一个小问题。我注册了回调函数 MQTTClient_messageArrived 和 MQTTClient_connectionLost。 我在此回调函数中调用 MQTT
我使用 Apache Artemis 作为我的 mqtt 代理。我有一个以主从方式配置的 Artemis 集群。当主服务器发生故障时,备份服务器接管,客户端必须连接到从服务器。主站和从站有不同的IP。
我目前正在开发一个应该在医疗机构中运行的小型“紧急按钮”应用程序。由于该项目的假设之一是独立于 Internet,因此我决定使用在本地 WLAN 中设置服务器的 MQTT。 我已经实现了 Paho A
我正在尝试使用基本的 Eclipse Paho MQTT 客户端版本 1.1.0,用于连接到 CloudAMQP RabbitMQ 实例、订阅主题并接收消息(我从 Web 管理控制台发送的消息)。 如
我已经创建了 mqtt 连接suscribeData(),如下所示,以 24/7 从多个设备接收数据 @RequestMapping("/suscribe") @ResponseBody public
我最近开始使用 paho mqtt for java 和 mqtt,但我坚持使用 mqtt 代理和 paho 客户端本身提供的持久性机制。也许我误解了(可能就是这样)mqtt 上下文中的持久性概念。
我是 MQTT 和树莓派的新手!我正在运行一个客户端脚本,我只是使用另一个脚本发布一条消息。我正在使用自己的 Mosquitto 代理。 客户: import paho.mqtt.client as
我设法在我的 RPi 中的 Paho-MQTT 客户端和我的 VPS 中的 MQTT 代理之间建立了连接。 现在我正在尝试保护 MQTT 连接,并且我已将用户和密码添加到代理。我更改了 mosquit
为了演示 Paho MQTT,我下载了一个 Java 示例。 public class Thermometer { public static final String BROKER_URL
我是一名优秀的程序员,十分优秀!