[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.