Не нашёл ни одной Ru статьи или гайда, поэтому решил написать сам :)
Я использую PostgreSQL 12-й версии! На остальных не проверял! Соответственно, он у вас должен быть скачан и настроен для использования.
Шаг 1: Установка Wt
-
Загрузите Wt из официального репозитория.
-
Установите подходящую версию (например,
msvs2022 x64
).-
Убедитесь, что у вас выбраны пути установки по умолчанию (например,
C:Program FilesWt 4.11.1 msvs2022 x64
).
-
Шаг 2: Настройка проекта Visual Studio
2.1. Режим сборки
-
Переключите режим сборки в Visual Studio на Debug или Release:
-
В меню Проект → Свойства → Конфигурация
-
А также просто на панели инструментов:
-
2.2. Указание каталогов заголовочных файлов
-
Откройте Свойства проекта → C/C++ → Общие.
-
В поле Дополнительные каталоги включаемых файлов добавьте:
C:Program FilesWt 4.11.1 msvs2022 x64include
-
Нажмите Применить.
2.3. Проверка (на данном этапе чтобы убедиться что предыдущие шаги выполнены правильно!)
-
Включите библиотеку в ваш код:
#include <iostream> #include <Wt/Dbo/Dbo.h> int main(){ std::cout << "Hello World!" << std::endl; return 0; }
-
Если Visual Studio не подсвечивает её красным, значит, компилятор смог найти заголовочные файлы. Это означает, что шаги по настройке каталогов включаемых файлов выполнены правильно.
Важно! На данном этапе проект ещё не готов к полноценному использованию библиотеки. Компилятор только обнаружил заголовочные файлы, но функции из Wt использовать всё ещё нельзя, так как не настроены пути к библиотекам и их подключение.
Шаг 3: Настройка компоновщика
3.1. Добавление пути к библиотекам
-
Откройте Свойства проекта → Компоновщик → Общие.
-
В поле Дополнительные каталоги библиотек добавьте:
C:Program FilesWt 4.11.1 msvs2022 x64lib
3.2. Настройка зависимостей
-
Откройте Компоновщик → Ввод → Дополнительные зависимости.
-
Убедитесь, что там уже есть стандартные зависимости:
$(CoreLibraryDependencies);%(AdditionalDependencies)
-
Перед этими зависимостями добавьте зависимости Wt в зависимости от конфигурации:
-
Для Debug (d в конце названия указывает на Debug):
wtdbod.lib;wtdbopostgresd.lib;
-
Для Release:
wtdbo.lib;wtdbopostgres.lib;
-
-
Итоговая строка должна выглядеть, например, так:
wtdbod.lib;wtdbopostgresd.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)
Шаг 4: Настройка переменных среды
-
Откройте Панель управления → Система и безопасность → Система → Дополнительные параметры системы.
-
В разделе Переменные среды найдите переменную
Path
. -
Добавьте путь к каталогу
bin
Wt:C:Program FilesWt 4.11.1 msvs2022 x64bin
-
Нажмите OK, чтобы сохранить изменения.
-
Перезапустите Visual Studio, чтобы переменные среды обновились!
Шаг 5: Проверка работы
-
Чтобы понять что всё работает вставим следующий код:
#include <iostream> #include <Wt/Dbo/Dbo.h> #include <Wt/Dbo/backend/Postgres.h> #include <Windows.h> using namespace std; class TestTable { public: string name; int value; template<class Action> void persist(Action& a) { Wt::Dbo::field(a, name, "name"); Wt::Dbo::field(a, value, "value"); } }; int main() { setlocale(0, ""); // костыль для русского языка в консоли SetConsoleCP(65001); // два костыля для перевода exception'ов от библиотеки SetConsoleOutputCP(65001); try { string connectionString = "host=localhost " "port=5432 " "dbname=test2 " "user=postgres " "password=1234"; auto postgres = make_unique<Wt::Dbo::backend::Postgres>(connectionString); Wt::Dbo::Session session; session.setConnection(move(postgres)); session.mapClass<TestTable>("test_table"); { Wt::Dbo::Transaction transaction(session); session.execute("SET CLIENT_ENCODING TO 'WIN1251';"); // костыль для отправки русских символов в БД session.createTables(); cout << "Таблица 'test_table' создана или уже существует." << endl; } { Wt::Dbo::Transaction transaction(session); auto newRecord = session.add(make_unique<TestTable>(TestTable{ "Аркадий", 42 })); cout << "Запись добавлена: name = " << newRecord->name << ", value = " << newRecord->value << endl; transaction.commit(); } } catch (const exception& ex) { cerr << "Ошибка: " << ex.what() << endl; } return 0; }
-
Постройте и выполните проект.
Советы
-
Переключение Debug/Release:
-
Для каждой конфигурации вручную перепроверьте дополнительные зависимости (Debug требует
d
-версии библиотек).
-
-
Проблемы с wtdbo.dll:
-
Если при запуске программа выдаёт ошибку "не обнаружена wtdbo.dll":
-
Проверьте, что файл
wtdbo.dll
(илиwtdbod.dll
для Debug) находится вC:Program FilesWt 4.11.1 msvs2022 x64bin
. -
Либо добавьте этот путь в переменную среды
Path
, либо скопируйте DLL в ту же папку, где находится ваш исполняемый файл (но это костыли).
-
-
-
Отладка PostgreSQL:
-
Убедитесь, что PostgreSQL запущен, и все параметры подключения (хост, порт, база данных, пользователь, пароль) верны.
-
-
Кириллица и С++:
-
Вообще не советую, но пример выше в коде :)
-
Теперь ваш проект с Wt должен работать корректно! Если кто знает как делать всё это без костылей на костыльной ОП, то жду ваших комментариев:)
Автор: llouqs