Одним из многих больших преимуществ использования C ++ для приложений и проектов является доступ к обширной библиотеке доступных библиотек и фреймворков C ++. По сути, существует библиотека C ++ для чего угодно, а если ее нет, то для нее определенно есть библиотека C.
В свое время интеграция разных библиотек в проекты C ++ была сложной задачей из-за различий в совместимости между различными компиляторами C ++. Проект, созданный с помощью GCC, будет иметь проблемы с компиляцией на VC ++, а проект, созданный с помощью VC ++, будет иметь проблемы с компиляцией на BCC и т. Д. К счастью, с тех пор мы прошли долгий путь, и компилятор C ++ теперь имеет значительный уровень совместимости с друг друга.
Использование CLANG в C ++ Builder не является исключением. В то время как классический компилятор часто имеет проблемы с современным синтаксисом C ++, компилятор CLANG является одним из наиболее совместимых со стандартами компиляторов C ++ и, как таковой, открывает обширный мир библиотек C ++ для ваших проектов C ++ Builder.
Это не значит, что это тривиально. Всегда есть некоторые уловки и хитрости, которые необходимо сделать, чтобы использовать любую библиотеку в ваших проектах, но по сравнению с тем, что было необходимо раньше, это очень просто.
В этом сообщении блога мы рассмотрим, что нужно, чтобы получить довольно распространенную библиотеку C ++, SQLiteCpp, работающую в проекте C ++ Builder.
Table of Contents
Что такое SQLiteCpp
SQLiteCpp — это оболочка C ++ RAII для библиотеки C базы данных sqlite, обеспечивающая отличный интерфейс C ++ для этой почти универсальной переносимой библиотеки реляционных баз данных.
Sqlite используется во многих различных приложениях, начиная от встроенных проектов и заканчивая основными приложениями, как простая в использовании интегрированная база данных для хранения, запроса и извлечения данных самых разных типов.
Мы будем использовать SQLiteCpp для создания простого приложения, которое хранит и извлекает некоторые данные внутри простого консольного приложения в C ++ Builder.
Получение библиотеки
SQLiteCpp размещен на Github, и репозиторий включает все файлы, необходимые для компиляции в ваше приложение.
1. Перейдите на https://github.com/SRombauts/SQLiteCpp.
2. Загрузите последнюю версию и распакуйте ее в папку.
Настройка проектов
SQLiteCpp поддерживает систему сборки CMake, поэтому мы могли бы использовать ее для создания наших библиотек с помощью C ++ Builder, но часто более интересным и прямым является создание проектов самостоятельно. Это дает дополнительное преимущество, заключающееся в том, что вы можете настроить сборку в соответствии с вашими потребностями.
3. Создайте в папке извлечения каталог под названием cbuilder. Он будет содержать файлы нашего проекта для C ++ Builder. Результирующая структура каталогов должна выглядеть так:
4. Мы хотим создать эту библиотеку как статическую библиотеку, которую мы можем связать с нашим приложением C ++ Builder, поэтому перейдите в RAD Studio и создайте новый проект статической библиотеки. Сохраните этот проект как sqlitecpp.cbproj в каталоге cbuilder.
5. Перейдите в Параметры проекта и включите компилятор CLANG для всех конфигураций:
6. Перейдите в настройки библиотекаря и установите размер страницы на 64 (это основано на опыте — если вы не знаете, какой размер страницы использовать, компоновщик TLIB сообщит вам, нужно ли изменять размер страницы при построении. проект)
Выбор исходных файлов
Теперь, когда у нас настроен наш проект, нам нужно добавить необходимые исходные файлы в проект, который будет скомпилирован. Способ определения файлов, которые нужно включить, различается для каждого проекта, и иногда требуется некоторое время, чтобы определить правильные файлы. CMakeLists.txt определенно может помочь в этом. Следующие рекомендации должны помочь:
- Найдите каталог src, файлы с расширением .c, .cpp или .cxx будут исходными файлами.
- Игнорировать файлы, содержащие метод main (). Обычно это тестовые, демонстрационные файлы или файлы примеров, предназначенные для автономных приложений.
Для SQLiteCpp это исходные файлы:
- sqlite3 / sqlite3.c
- src / Transaction.cpp
- src / Backup.cpp
- src / Column.cpp
- src / Database.cpp
- src / Exception.cpp
- src / Statement.cpp
7. Добавьте эти файлы в проект библиотеки.
Создание библиотеки
Если бы вы попытались собрать эту библиотеку прямо сейчас, вы бы получили следующие ошибки:
Нам нужно обновить некоторые параметры проекта и установить некоторые пути включения.
8. Задайте путь включения. Вы могли заметить, что в проекте есть подключаемый каталог, который находится на том же уровне, что и файлы src. Добавьте эту папку в путь включения проекта, чтобы можно было найти заголовки:
9. Постройте проект. Он должен успешно завершиться. Поздравляем, теперь у вас есть библиотека SQLiteCpp.
Использование библиотеки
Теперь, когда у нас есть библиотека, мы можем создать простое приложение для ее тестирования.
10. Создайте новое консольное приложение C ++ в той же группе проектов. Выберите библиотеку визуальных компонентов в качестве основы для консольного приложения, чтобы мы могли увидеть, как эта библиотека работает с VCL.
11. Сохраните этот проект как test_sqlite.cbproj в папке cbuilder.
12. Перейдите в Параметры проекта для этого проекта и добавьте ..include в качестве пути включения для этого проекта и включите компилятор CLANG, как мы это сделали для библиотеки SQLiteCpp.
13. Добавьте пути включения в начало файла C ++ в нашем тестовом проекте:
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; } |
Обратите внимание, что мы использовали каталог ссылок #pragma, чтобы сообщить компилятору, что нам нужно связать библиотеку sqlitecpp.lib из проекта библиотеки. В качестве альтернативы вы можете просто добавить файл .lib в тестовый проект, но использование ссылки #pragma может упростить эту задачу.
14. Теперь добавьте код для создания базы данных, вставьте данные и прочтите их снова:
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. Наконец, запустите проект, чтобы скомпилировать его и посмотрите, как работает библиотека:
Последние мысли
Как показано в этом простом упражнении, C ++ Builder с компилятором CLANG открывает мир возможностей для различных библиотек и фреймворков, которые можно интегрировать в ваши проекты. Нам не нужно было вносить ни единого изменения кода, чтобы эта библиотека C ++ с открытым исходным кодом могла компилироваться и работать в наших приложениях C ++ Builder.
Существуют тысячи других проектов на C ++, и я настоятельно рекомендую вам поэкспериментировать с их использованием в своих проектах на C ++!
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition