![CppTwineCompileSpeed | Embarcadero RAD Studio Delphi C++Builder Blogs cpptwinecompilespeed](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/12/CppTwineCompileSpeed-5394911.jpg?resize=1140%2C675&ssl=1)
Einer der vielen großen Vorteile der Verwendung von C ++ für Anwendungen und Projekte ist der Zugriff auf die umfangreiche Bibliothek der verfügbaren C ++ – Bibliotheken und Frameworks. Grundsätzlich gibt es für alles eine C ++ – Bibliothek, und wenn nicht, gibt es definitiv eine C-Bibliothek dafür.
Früher war es im Allgemeinen eine Herausforderung, verschiedene Bibliotheken in C ++ – Projekte zu integrieren, da die Kompatibilität zwischen verschiedenen C ++ – Compilern unterschiedlich war. Ein mit GCC erstelltes Projekt hätte Probleme beim Kompilieren auf VC ++, und ein mit VC ++ erstelltes Projekt hätte Probleme beim Kompilieren auf BCC usw. Zum Glück haben wir seit jenen Tagen einen langen Weg zurückgelegt, und der C ++ – Compiler ist jetzt in erheblichem Maße kompatibel mit gegenseitig.
Die Verwendung von CLANG durch C ++ Builder ist keine Ausnahme. Während der klassische Compiler häufig Probleme mit der modernen C ++ – Syntax hat, ist der CLANG-Compiler einer der standardkonformsten verfügbaren C ++ – Compiler und eröffnet Ihren C ++ Builder-Projekten das umfangreiche Universum an C ++ – Bibliotheken.
Das heißt nicht, dass es trivial ist. Es gibt immer einige Tricks und Optimierungen, die Sie tun müssen, um eine Bibliothek in Ihren Projekten zu verwenden, aber im Vergleich zu dem, was vorher notwendig war, ist es kinderleicht.
In diesem Blog-Beitrag werden wir untersuchen, was erforderlich ist, um eine ziemlich häufige C ++ – Bibliothek, SQLiteCpp, zu erhalten, die in einem C ++ Builder-Projekt funktioniert.
Table of Contents
Was ist SQLiteCpp?
SQLiteCpp ist ein C ++ – RAII-Wrapper für die SQLite-Datenbank-C-Bibliothek und bietet eine hervorragende C ++ – Schnittstelle zu dieser fast universellen tragbaren relationalen Datenbankbibliothek.
Sqlite wird in vielen verschiedenen Anwendungen verwendet, von eingebetteten Projekten bis hin zu Mainstream-Anwendungen, als benutzerfreundliche integrierte Datenbank zum Speichern, Abfragen und Abrufen von Daten vieler verschiedener Typen.
Wir werden SQLiteCpp verwenden, um eine einfache Anwendung zu erstellen, die einige Daten in einer einfachen Konsolenanwendung in C ++ Builder speichert und abruft.
Die Bibliothek erhalten
SQLiteCpp wird auf Github gehostet und das Repository enthält alle Dateien, die zum Kompilieren in Ihre Anwendung erforderlich sind.
1. Gehen Sie zu https://github.com/SRombauts/SQLiteCpp
2. Laden Sie die neueste Version herunter und extrahieren Sie sie in einen Ordner
Projekte einrichten
SQLiteCpp unterstützt das CMake-Build-System, sodass wir damit unsere Bibliotheken mit C ++ Builder erstellen können. Oft ist es jedoch interessanter und direkter, die Projekte einfach selbst zu erstellen. Dies hat den zusätzlichen Vorteil, dass Sie den Build an Ihre Verwendung anpassen können.
3. Erstellen Sie im Extraktordner ein Verzeichnis mit dem Namen cbuilder. Dies enthält unsere C ++ Builder-spezifischen Projektdateien. Die resultierende Verzeichnisstruktur sollte folgendermaßen aussehen:
![file1 | Embarcadero RAD Studio Delphi C++Builder Blogs file1 2](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2021/03/file1-1758159.png?resize=666%2C487&ssl=1)
4. Wir möchten diese Bibliothek als statische Bibliothek erstellen, die wir mit unserer C ++ Builder-Anwendung verknüpfen können. Gehen Sie also zu RAD Studio und erstellen Sie ein neues statisches Bibliotheksprojekt. Speichern Sie dieses Projekt als sqlitecpp.cbproj im Verzeichnis cbuilder.
5. Gehen Sie in die Projektoptionen und aktivieren Sie den CLANG-Compiler für alle Konfigurationen:
6. Gehen Sie zu den Einstellungen des Bibliothekars und stellen Sie die Seitengröße auf 64 ein (dies basiert auf Erfahrung. Wenn Sie die zu verwendende Seitengröße nicht kennen, teilt Ihnen der TLIB-Linker mit, ob die Seitengröße beim Erstellen angepasst werden muss das Projekt)
Auswahl der Quelldateien
Nachdem wir unser Projekt eingerichtet haben, müssen wir dem zu kompilierenden Projekt die erforderlichen Quelldateien hinzufügen. Die Art und Weise, zu bestimmen, welche Dateien eingeschlossen werden sollen, ist für jedes Projekt unterschiedlich, und manchmal muss etwas gegraben werden, um die richtigen Dateien zu ermitteln. CMakeLists.txt kann definitiv dabei helfen. Die folgenden Richtlinien sollten helfen:
- Suchen Sie nach einem src-Verzeichnis. Dateien mit der Erweiterung .c, .cpp oder .cxx sind die Quelldateien
- Ignorieren Sie Dateien, die eine main () -Methode enthalten. Dies sind im Allgemeinen Test-, Demo- oder Beispieldateien, die als eigenständige Anwendungen gedacht sind.
Für SQLiteCpp sind dies die Quelldateien:
- sqlite3 / sqlite3.c
- src / Transaction.cpp
- src / Backup.cpp
- src / Column.cpp
- src / Database.cpp
- src / Exception.cpp
- src / Statement.cpp
7. Fügen Sie diese Dateien dem Bibliotheksprojekt hinzu.
Aufbau der Bibliothek
Wenn Sie jetzt versuchen würden, diese Bibliothek zu erstellen, würden Sie einige Fehler erhalten, die den folgenden ähnlich sind:
Wir müssen einige Projektoptionen aktualisieren und einige Include-Pfade festlegen.
8. Legen Sie den Include-Pfad fest. Möglicherweise haben Sie bemerkt, dass das Projekt über ein Include-Verzeichnis verfügt, das sich auf derselben Ebene wie die src-Dateien befindet. Fügen Sie diesen Ordner dem Projekteinschlusspfad hinzu, damit die Header gefunden werden können:
9. Erstellen Sie das Projekt. Es sollte erfolgreich abgeschlossen werden. Herzlichen Glückwunsch, Sie haben jetzt Ihre SQLiteCpp-Bibliothek.
Verwenden der Bibliothek
Nachdem wir unsere Bibliothek haben, können wir eine einfache Anwendung erstellen, um sie zu testen.
10. Erstellen Sie eine neue C ++ – Konsolenanwendung in derselben Projektgruppe. Wählen Sie die Visual Component Library als Framework für die Konsolenanwendung aus, damit diese Bibliothek mit der VCL funktioniert.
11. Speichern Sie dieses Projekt als test_sqlite.cbproj im Ordner cbuilder.
12. Gehen Sie in die Projektoptionen für dieses Projekt und fügen Sie ..include als Include-Pfad für dieses Projekt hinzu und aktivieren Sie den CLANG-Compiler, genau wie wir es für die SQLiteCpp-Bibliothek getan haben.
13. Fügen Sie in unserem Testprojekt die Include-Pfade oben in die C ++ – Datei ein:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <vcl.h> #include <windows.h> #pragma hdrstop #pragma argsused #include <tchar.h> #include <stdio.h> #include <conio.h> #include <SQLiteCpp/SQLiteCpp.h> #pragma link "sqlitecpp.lib" int _tmain(int argc, _TCHAR* argv[]) { return 0; } |
Beachten Sie, dass wir das Linkverzeichnis #pragma verwendet haben, um dem Compiler mitzuteilen, dass die Bibliothek sqlitecpp.lib aus dem Bibliotheksprojekt verknüpft werden muss. Alternativ können Sie die .lib-Datei auch einfach zum Testprojekt hinzufügen. Die Verwendung des Links #pragma kann dies jedoch vereinfachen.
14. Fügen Sie nun Code hinzu, um eine Datenbank zu erstellen, fügen Sie einige Daten ein und lesen Sie sie erneut aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
int _tmain(int argc, _TCHAR* argv[]) { // Open a database file in create/write mode SQLite::Database db("test.db3", SQLite::OPEN_READWRITE | SQLite::OPEN_CREATE); std::cout << "SQLite database file " << db.getFilename().c_str() << "n"; // Create a new table with an explicit "id" column aliasing the underlying rowid db.exec("DROP TABLE IF EXISTS test"); db.exec("CREATE TABLE test (id INTEGER PRIMARY KEY, value TEXT)"); // first row db.exec("INSERT INTO test VALUES (NULL, "test")"); // second row db.exec("INSERT INTO test VALUES (NULL, "second")"); // update the second row db.exec("UPDATE test SET value="second-updated" WHERE id='2'"); // Check the results : expect two row of result SQLite::Statement query(db, "SELECT * FROM test"); std::cout << "SELECT * FROM test :n"; while (query.executeStep()) { std::cout << "row (" << query.getColumn(0) << ", "" << query.getColumn(1) << "")n"; } getch(); return 0; } |
15. Führen Sie abschließend das Projekt aus, um es zu kompilieren und die Bibliothek in Betrieb zu sehen:
Abschließende Gedanken
Wie diese einfache Übung gezeigt hat, eröffnet C ++ Builder mit dem CLANG-Compiler eine Vielzahl von Möglichkeiten für die verschiedenen Bibliotheken und Frameworks, die in Ihre Projekte integriert werden können. Wir mussten keine einzige Codeänderung vornehmen, damit diese Open-Source-C ++ – Bibliothek kompiliert und in unseren C ++ Builder-Anwendungen funktioniert.
Es gibt Tausende anderer C ++ – Projekte, und ich kann Ihnen dringend empfehlen, mit deren Verwendung in Ihren C ++ – Projekten zu experimentieren!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition