[ems-collector] Kompilieren mit MQTT funktioniert nicht

OP #5138783
Lesenswert?

Hallo,

ich versuche die MQTT-Unterstuetzung fuer collectord einzukompilieren, 
schlaegt aber mit folgenden Fehlern fehl:

```
++ -Wall -c -O2 -DHAVE_DAEMONIZE -I../../mqtt_client_cpp/include 
-DMQTT_NO_TLS -DHAVE_MQTT main.cpp
In file included from main.cpp:31:0:
MqttAdapter.h:69:92: Fehler: falsche Anzahl der Templateargumente (2, 
sollte 1 sein)
  std::shared_ptr<mqtt::client<boost::asio::ip::tcp::socket, 
boost::asio::io_service::strand> > m_client;
                                                                                            ^
In file included from 
../../mqtt_client_cpp/include/mqtt_client_cpp.hpp:8:0,
                 from MqttAdapter.h:28,
                 from main.cpp:31:
../../mqtt_client_cpp/include/mqtt/client.hpp:45:7: Anmerkung: für 
»template<class Socket> class mqtt::client« bereitgestellt
 class client : public endpoint<Socket> {
       ^~~~~~
In file included from main.cpp:31:0:
MqttAdapter.h:69:94: Fehler: Templateargument 1 ist ungültig
  std::shared_ptr<mqtt::client<boost::asio::ip::tcp::socket, 
boost::asio::io_service::strand> > m_client;
                                                                                              ^
make: *** [Makefile:49: main.o] Fehler 1

```

Verwendete Libraries/Compilerversionen unter archlinux:
boost: 1.64.0-4
gcc: 7.2.0-2
gcc-5: 5.4.0-1
mqtt_client_cpp: v1.0.7


Kann mir jemand weiterhelfen?


Gruesse,

Matthias
#5138830
Lesenswert?

Hallo Matthias,

ich kenne deine vewendeten Bibliothek selber nicht, aber ich vermute, 
dass du Versionen verwendest, die nicht kompatibel sind.

So wie es aussieht will MqttAdapter.h das Template mqtt::client mit zwei 
Parametern verwenden, es hat aber nur einen Parameter.

Du kannst ja mal schauen, ob MqttAdapter zur Version von mqtt_client_cpp 
passt.
OP #5140269
Lesenswert?

Mit folgendem Patch funktioniert es den aktuellsten Libraries:

boost-libs=1.64.0, mqtt_cpp=1.07


```
diff --git a/collector/MqttAdapter.h b/collector/MqttAdapter.h
index ec02b65..2a9751e 100644
--- a/collector/MqttAdapter.h
+++ b/collector/MqttAdapter.h
@@ -66,7 +66,7 @@ class MqttAdapter : public boost::noncopyable
        static const unsigned int MinRetryDelaySeconds = 5;
        static const unsigned int MaxRetryDelaySeconds = 5 * 60;

-       std::shared_ptr<mqtt::client<boost::asio::ip::tcp::socket, 
boost::asio::io_service::strand> > m_client;
+ 
std::shared_ptr<mqtt::client<mqtt::tcp_endpoint<boost::asio::ip::tcp::so 
cket,  boost::asio::io_service::strand> > > m_client;
        EmsCommandSender * m_sender;
        boost::shared_ptr<EmsCommandClient> m_cmdClient;
        bool m_connected;
```

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren