Ich entwickle eine Qt für Symbian-Anwendung. Ich muss bestimmte plattformspezifische APIs verwenden, die nur für bestimmte S60-Versionen verfügbar sind. Zum Beispiel:Kompilieren Multi-Plattform Qt-Anwendung für Symbian
-S60 3. Auflage FP1 Libs: S60_common_lib, S60_3rd_ed_lib
-S60 3. Auflage FP2 Libs: S60_common_lib, S60_3rd_ed_lib, Symbian_common_lib
-S60 5. Auflage Libs: S60_common_lib S60_5th_ed_lib, Symbian_common_lib
-Symbian^3 libs: S60_5th_ed_lib, Symbian3_lib, Sy mbian_common_lib
Wie Sie sehen können, werden bestimmte Bibliotheken von mehreren Plattformen gemeinsam genutzt. Derzeit muss ich das ganze Projekt mehrere Male kompilieren, um eine separate .exe, Ressourcen usw. für alle verschiedenen S60-Plattformen zu erhalten. Ich tue dies, indem ich eine Kennung für jede Plattform in der Profildatei definiere. Zum Beispiel:
# symbian 3
DEFINES += symbian_3_build
symbian:LIBS += # ...
# S60 3.1
# DEFINES += s60_fp1
# LIBS...
Und in eigentlichen Code Ich habe so etwas wie:
#ifdef symbian_3_build
#include <some_s3_header.h>
#elseif s60_fp1
#include <some_fp1_header.h>
#endif
Also meine Fragen sind:
Ist dies der einzige Weg, Multi-Plattform Qt für Symbian Anwendung zu kompilieren (zB gibt es eine Möglichkeit, es mit nur einer exe arbeiten zu lassen)?
Ich benutze Qt Creator. Nach dem Kompilieren für eine Plattform kopiere ich die Ressourcendateien (.exe, .rsc, _reg.rsc) aus dem epoc-Ordner vor dem Kompilieren zur nächsten Plattform (Wiederaufbau überholt alte Dateien). Nachdem alle Versionen kompiliert und an einem bestimmten Ort gesammelt wurden, erstelle ich eine einzelne sis-Datei, die verschiedene Versionen auf der Plattform installiert. Dieser Prozess ist sehr anfällig für Fehler. Gibt es einen besseren Weg, dies zu tun?
Danke.
Danke für die Antwort. Ich habe mir RLibrary angeschaut und es scheint mir mit meinen eigenen DLLs nützlich zu sein. Die API, die ich verwende, kann jedoch beispielsweise eine plattformspezifische private API sein. In diesem Fall kann ich mir über die Struktur der DLL nicht sicher sein oder habe keinen Zugriff auf die .def-Datei. – Routa
@Routa: Sie könnten diese DLLs in Ihre eigenen Wrapper-DLLs (statisch mit diesen privaten API-DLLs verknüpft) einbinden und dann die Wrapper-DLL dynamisch laden. – laalto
Also im Grunde bedeutet das, dass ich meine eigene Wrapper-DLL für jede Plattform erstellen und dann installieren muss. Ist es möglich, diese polymorphen DLLs (meine eigenen Wrapper) mit Qt zu erstellen (ich weiß, wie man "normale" DLLs erstellt)? – Routa