paho.mqtt.cpp



  • Hi.

    Versuche gerade vergeblich die Library https://github.com/eclipse/paho.mqtt.cpp in meinem Visual c++ Projekt zu verwenden.

    In der Anleitung steht dass ich mir mit CMake ein Visual Stuido Projekt erzeugen kann. Da ich noch nie was mit CMake gemacht habe und die Anleitung nicht ganz sauber ist hat das nun etwas gedauert. Habe ich habe es geschafft und ich habe nun eine Visual Studio Solution.

    Aber blöde Frage, was mache ich nun damit. Eigentlich möchte ich ja die library in meinem Projekt verwenden.

    Habe auch schon die Dateien aus dem src Ordner in mein Projekt importiert. Aber das passt auch nicht so recht.

    Im Ordner src liegen erst mal alle .cpp files und in einem Unterordner der wiederum mqtt heißt alle .h files.
    In den header files sind includes zu den anderen header files im selben Ordner

    aber wiederum so angegeben:

    #include "mqtt/types.h"

    das findet der Kompiler dann natülich nicht weil es auf der selben Ebene ist und nicht noch in einem weiteren Unterordner mqtt.

    Kann mir jemand erklären wie ich die librray richtig verwende. Also so dass ich diese in meinem bestehenden vc++ Projekt nutzen kann.



  • @booster sagte in paho.mqtt.cpp:

    Habe ich habe es geschafft und ich habe nun eine Visual Studio Solution.
    Aber blöde Frage, was mache ich nun damit. Eigentlich möchte ich ja die library in meinem Projekt verwenden.

    Die Visual Studio Solution verwendest Du, um die Library zu bauen, was zu einer oder mehreren .lib in den Debug- und Releaseverzeichnissen führen sollte. Diese wiederum kannst Du in Deinem Projekt einbinden (linken. #prama comment(lib, "sonstwas.lib") oder "Additional Linker Dependencies" in den Projekteinstellungen) um Funktionen der Library zu verwenden.



  • Hi swordfish

    ne lib kam unter anderem raus. "paho-mqttpp3.lib"
    neben anderen files wie zB. noch weiteren cmakefiles und irgendwelchen projektfiles die sich z.b. install.vcxproj nennen.

    Wie man eine lib einbindet war mir klar. Dachte nur ich muss hier irgendwas mit dem Installer Projekt noch machen.

    Ok. Wenn ich dann nun aber die .lib einbinde. Welche header files muss ich da nehmen. Im erzeugten Projekt finde ich keine. Hätte da noch nen Ordner erwartet der sich include nennt, oder was dergleichen.

    Oder muss ich die header aus dem src\mqtt Verzeichniss nehmen. Die sind nachwievor aber immer noch "falsch". Also ich meine die haben das mqtt\ Verzeichnis im #include stehen obwohl alle headers auf der selben ebene sind.



  • @booster sagte in paho.mqtt.cpp:

    Oder muss ich die header aus dem src\mqtt Verzeichniss nehmen. Die sind nachwievor aber immer noch "falsch". Also ich meine die haben das mqtt\ Verzeichnis im #include stehen obwohl alle headers auf der selben ebene sind.

    ......./sonstwo/paho.mqtt.cpp/src/ zum Include-Path hinzufügen. Dann passen #includes mit mqtt/sonstwas.h.



  • @swordfish sagte in paho.mqtt.cpp:

    Dann passen #includes mit mqtt/sonstwas.h

    ja die meinen dann schon

    aber das Problem ist doch

    die headerdateien die in mqtt drin sind also z.B.
    async_client.h hat wiederum einen inlcude der wie folgt lautet

    #include "mqtt/types.h"

    obwohl ja async_client.h und types.h im selben Ordner sind.

    natürlich kann ich nun alle header Dateien durchgehen und dort das mqtt\ entfernen. Aber das ist doch nicht Sinn der Sache.



  • @booster sagte in paho.mqtt.cpp:

    aber das Problem ist doch
    die headerdateien die in mqtt drin sind also z.B.
    async_client.h hat wiederum einen inlcude der wie folgt lautet
    #include "mqtt/types.h"
    obwohl ja async_client.h und types.h im selben Ordner sind.

    Nein, das ist kein Problem.



  • Ja ok. Lag an was anderem dass er die Dateien nicht gefunden hat. Trotzdem gibt es Gründe wieso man das Verzeichnis nochmals angibt?



  • @booster sagte in paho.mqtt.cpp:

    Trotzdem gibt es Gründe wieso man das Verzeichnis nochmals angibt?

    Wie viele types.h mag es wohl in einem Projekt geben, das mehre Bibliotheken verwendet? mqtt/types.h dagegen wird es nicht so oft geben.



  • Es scheint aber doch ein Problem zu sein. Ich habe nun mal die gesamten Quellen in mein Projekt eingefügt.
    Und erhalte nun den Fehler:

    #include "mqtt/async_client.h"
    
    Cannot open include file: 'mqtt/async_client.h': No such file or directory	\paho.mqtt\mqtt\client.h	27
    

    entferne ich das mqtt/ funktioniert dieser include

    erhalte aber dann beim include von #include "mqtt/types.h" in async_client.h' den Fehler.

    Entferne ich nun bei allen includes das mqtt/ bekomme ich keine Fehler mehr.



  • @booster sagte in paho.mqtt.cpp:

    Es scheint aber doch ein Problem zu sein

    Das Problem sitzt vor deinem Computer.

    Deine Include-Pfade sind fehlerhaft.



  • @manni66 sagte in paho.mqtt.cpp:

    Das Problem sitzt vor deinem Computer.

    Das mag schon sein. Drum suche ich hier ja auch hilfe.

    @manni66 sagte in paho.mqtt.cpp:

    Deine Include-Pfade sind fehlerhaft.

    Wie ich bereits sagte habe ich nun anstatt die lib zu generieren das gesamte Source verzeichnis in mein Projekt rein gezogen.



  • Wie ich bereits gesagt habe, Du sollst die lib bauen, Dein Projekt dagegen linken und ..../sonstwo/paho.mqtt.cpp/src/ zum Include-Path hinzufügen.



  • @swordfish sagte in paho.mqtt.cpp:

    Wie ich bereits gesagt habe, Du sollst die lib bauen, Dein Projekt dagegen linken und ..../sonstwo/paho.mqtt.cpp/src/ zum Include-Path hinzufügen.

    Ja das habe ich gemacht. Allerdings erhalte ich dann etliche Linker fehler. Anscheinend bin ich da auch nicht der einzige denn es gibt bei github dazu schon einen issue

    https://github.com/eclipse/paho.mqtt.cpp/issues/121

    Der aber seit Juli 2017 offen ist ohne Lösungsvorschlag.

    Jetzt habe ich mich nach einem alternativen Lösungsweg umgeschaut. Und dieser ist Quellen ins eigene Projekt einfügen und selbst kompilieren. Funktioniert, aber nur mit Anpassung der der #include Anweisungen.

    Wenn mir jemand helfen kann die Linkerfehler weg zu bekommen auch recht.
    Trotzdem intertessiert es mich wieso es in einem Fall die header im selben Verzeichnis findet und im anderen Fall nicht.



  • @booster sagte in paho.mqtt.cpp:

    @manni66 sagte in paho.mqtt.cpp:

    Deine Include-Pfade sind fehlerhaft.

    Wie ich bereits sagte habe ich nun anstatt die lib zu generieren das gesamte Source verzeichnis in mein Projekt rein gezogen.

    Das ist kein Widerspruch.



  • Sorry steh ich auf dem Schlauch.

    Also in meinem Quellverzeichnis habe ich einen Ordner mit paho.mqtt angelegt darunter liegen dann die ganzen cpp.files und der besagte mqqt Ordner mit den headerfiles.

    Habe nun den ganzen Ordner via drag&drop in mein Projekt im Visual Studio rein gezogen.

    Um nun den mqtt client in meinem Code verwenden zu können includiere ich die header Datei wie folgt:

    #include "paho.mqtt/mqtt/client.h"

    muss ich nun trotzdem

    ..../sonstwo/paho.mqtt.cpp/src/ in mein Include-Path mit aufnehmen ?



  • Mach es doch einfach.



  • Habe ich ja auch gleich nach dem Post getan. Gut es funktioniert.

    Wieso ich dass machen muss ist mir aber noch nicht klar.
    Wenn ich das doch in mein Projekt rein ziehe ist das doch im Projekt drin und muss doch nicht auch noch im Include-path rein. ?

    -> Jetzt habe ich allerdings die selben Linker Fehler, als wenn ich die lib einbinde 😞



  • Das haben dir die beiden anderen doch schon erklärt. Um Konflikte mit anderen (evtl. gleichnamigen) Headerdateien zu vermeiden wird innerhalb der Library der Verzeichnisname noch angegeben (quasi wie ein namespace) und daher muß der Include-Pfad passend gesetzt sein.

    Und die Linkerfehler haben nichts mit dem Include zu tun, d.h. die Compilerphase ist erfolgreich durchgelaufen.
    Welche erhältst du denn? Ich nehme mal an, daß die MQTT-Lib noch andere Libs benötigt, welche du dann eben auch noch einbinden mußt ("Linker input" sowie "Linker paths").



  • This code requires the Paho C library by Ian Craggs, et al., specifically version 1.2.0 (Paho Release 1.3) or possibly later.

    Da zu dieser Lib keine Fragen auftauchen, hast du sie vermutlich nicht installiert.



  • @th69 sagte in paho.mqtt.cpp:

    Und die Linkerfehler haben nichts mit dem Include zu tun, d.h. die Compilerphase ist erfolgreich durchgelaufen.

    Das ist klar. Das habe ich ja auch nicht behauptet.

    @th69 sagte in paho.mqtt.cpp:

    Ich nehme mal an, daß die MQTT-Lib noch andere Libs benötigt, welche du dann eben auch noch einbinden mußt

    Ja, wie Manni erwähnt die Paho c library. Das habe ich allerdings getan.

    Linker Fehler sind eigentlich genau die selben die in dem angegebenen link zu dem issue in github auf dem zweiten Screenshot zu sehen sind.

    Also einer davon:

    unresolved external symbol _MQTTAsync_unsubscribeMany referenced in function "public: virtual class std::shared_ptr<class mqtt::token> __thiscall mqtt::async_client::unsubscribe(class std::shared_ptr<class mqtt::string_collection const >)" (?unsubscribe@async_client@mqtt@@UAE?AV?$shared_ptr@Vtoken@mqtt@@@std@@V?$shared_ptr@$$CBVstring_collection@mqtt@@@4@@Z)
    

Log in to reply