paho.mqtt.cpp



  • Ohjee. übersehen

    paho.mqtt.c\lib\paho-mqtt3a.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86'

    Denke das wird das Problem sein. Ich muss mein Projekt mit x86 also win32 kompilieren weil ich noch 2 weitere libs einbinde die nur in x86 zur Verfügung stehen.

    Die paho.mqtt.c library anscheinend nur in x64 Version.



  • Darf ich euch nochmals um Hilfe bitten.
    Die paho.mqtt.c library steht momentan also nur in der 64bit Version zur Verfügung.
    Das paho.mqtt.cpp Projekt stellt eine CMake Datei zur Verfügung die einem eine Visual Studio Solution erzeugt. Hier ist allerdings nur die win32 Plattform konfiguriert. ( Passt alles wunderbar zusammen 🙂 ) Also mit ein paar Hürden die Solution auf 64bit umgestellt und die paho.mqtt.cpp library erzeugt.

    Als nächstes habe ich dann ein kleines Consolenprojekt angelegt und darin dann beide librarys eingebunden.

    Nun ganz einfach mal eine Verbindung zum loakelen Broker herstellen:

    #include "stdafx.h"
    using namespace std;
    
    #include "mqtt/async_client.h"
    
    
    const std::string DFLT_SERVER_ADDRESS{ "tcp://localhost:1883" };
    const std::string DFLT_CLIENT_ID{ "async_publish" };
    
    int main()
    {
    	cout << "Initializing for server '" << DFLT_SERVER_ADDRESS << "'..." << endl;
    	mqtt::async_client client(DFLT_SERVER_ADDRESS, DFLT_CLIENT_ID);
    }
    

    Code kompiliert. Aber wenn ich starten will beendet sich mein Programm sofort wieder (main wird nicht aufgerufen)

    Ausgabe:

    "MyMqttTestClient.exe" (Win32): "D:\Projekte\MyMqttTestClient\x64\Debug\MyMqttTestClient.exe" geladen. Symbole wurden geladen.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\ntdll.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\kernel32.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\KernelBase.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\sysfer.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\msvcp140d.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\vcruntime140d.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\ucrtbased.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-localization-l1-2-0.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-processthreads-l1-1-1.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-file-l1-2-0.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-timezone-l1-1-0.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-file-l2-1-0.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    "MyMqttTestClient.exe" (Win32): "C:\Windows\System32\api-ms-win-core-synch-l1-2-0.dll" geladen. PDB-Datei wurde nicht gefunden oder konnte nicht geöffnet werden.
    Das Programm "[11748] MyMqttTestClient.exe" wurde mit Code -1073741515 (0xc0000135) 'Es wurde keine abhängige DLL gefunden' beendet.
    

    Was fehlt mir hier?



  • Die PDB-Warnungen kannst du ignorieren, aber die letzte Zeile ist entscheidend: es findet eine DLL nicht.

    Kopiere die DLLs (deine gebauten Libraries) in das Verzeichnis des Konsolenprogramms.

    Wenn das auch nicht reicht, dann benutze den DependencyWalker und öffne die EXE damit - es wird dann rot markieren, welche (abhängigen) DLLs noch fehlen.



  • Hi. Th69

    Natürlich: Habe gar nicht gesehen dass die c Lib auch noch DLLs hat. Die lagen bisher nur im eingebundenen lib Verzeichnis. Die cpp library (die die ich selber builden musste) hat wiederum aber keine dlls.

    Aber nun scheint es zu funktionieren wenn ich die DLLs ins Ausgabeverzeichnis kopiere.

    Danke fürs auf die Sprünge helfen.

    Nun aber noch eine andere Frage. Und zwar erstelle ich ja die cpp libs selber mit der erzeugten Solution. Muss ich nun eine lib als "Debug" und eine als "Release" Variante zur Verfügung stellen?

    Ich wollte eigentlich nur eine Release Variante erzeugen. Die library will ich ja nicht debuggen.
    Dann erhalte ich aber solche Meldungen wie:

    Konflikt ermittelt für "RuntimeLibrary": Der Wert "MDd_DynamicDebug" stimmt nicht mit dem Wert "MD_DynamicRelease" in MyMqttTestClient.obj überein.
    
    Konflikt ermittelt für "_ITERATOR_DEBUG_LEVEL": Der Wert "2" stimmt nicht mit dem Wert "0" in MyMqttTestClient.obj überein.
    


  • @booster sagte in paho.mqtt.cpp:

    Muss ich nun eine lib als "Debug" und eine als "Release" Variante zur Verfügung stellen?

    Ja.



  • @theta sagte in paho.mqtt.cpp:

    Ja.

    Ok. Das ist aber nur der Fall wenn ich nur eine statische Lib habe. Wenn ich eine DLL habe wie im Fall der c Library benötige ich nur eine Variante. Richtig?



  • @booster sagte in paho.mqtt.cpp:

    @theta sagte in paho.mqtt.cpp:

    Ja.

    Ok. Das ist aber nur der Fall wenn ich nur eine statische Lib habe. Wenn ich eine DLL habe wie im Fall der c Library benötige ich nur eine Variante. Richtig?

    Nein, generell auch bei DLLs. Allerdings gibt es Fälle, wo es auch nur mit einer Variante funktioniert (bei C- oder pure-virtual C++ Interfaces und nur wenn new/delete innerhalb der gleichen DLL/EXE benutzt wird).


Anmelden zum Antworten