Гайд по настройке Wt::Dbo и Visual Studio С++ для работы на Windows

от автора

Не нашёл ни одной Ru статьи или гайда, поэтому решил написать сам 🙂

Я использую PostgreSQL 12-й версии! На остальных не проверял! Соответственно, он у вас должен быть скачан и настроен для использования.

Шаг 1: Установка Wt

  1. Загрузите Wt из официального репозитория.

  2. Установите подходящую версию (например, msvs2022 x64).

    • Убедитесь, что у вас выбраны пути установки по умолчанию (например, C:\Program Files\Wt 4.11.1 msvs2022 x64).

Шаг 2: Настройка проекта Visual Studio

2.1. Режим сборки

  • Переключите режим сборки в Visual Studio на Debug или Release:

    • В меню Проект Свойства Конфигурация

    • А также просто на панели инструментов:

2.2. Указание каталогов заголовочных файлов

  1. Откройте Свойства проектаC/C++Общие.

  2. В поле Дополнительные каталоги включаемых файлов добавьте:

    C:\Program Files\Wt 4.11.1 msvs2022 x64\include

  3. Нажмите Применить.

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. Добавление пути к библиотекам

  1. Откройте Свойства проектаКомпоновщикОбщие.

  2. В поле Дополнительные каталоги библиотек добавьте:

    C:\Program Files\Wt 4.11.1 msvs2022 x64\lib

3.2. Настройка зависимостей

  1. Откройте КомпоновщикВводДополнительные зависимости.

  2. Убедитесь, что там уже есть стандартные зависимости:

    $(CoreLibraryDependencies);%(AdditionalDependencies)

  3. Перед этими зависимостями добавьте зависимости Wt в зависимости от конфигурации:

    • Для Debug (d в конце названия указывает на Debug):

      wtdbod.lib;wtdbopostgresd.lib;

    • Для Release:

      wtdbo.lib;wtdbopostgres.lib;

  4. Итоговая строка должна выглядеть, например, так:

    wtdbod.lib;wtdbopostgresd.lib;$(CoreLibraryDependencies);%(AdditionalDependencies)

Шаг 4: Настройка переменных среды

  1. Откройте Панель управленияСистема и безопасностьСистемаДополнительные параметры системы.

  2. В разделе Переменные среды найдите переменную Path.

  3. Добавьте путь к каталогу bin Wt:

    C:\Program Files\Wt 4.11.1 msvs2022 x64\bin

  4. Нажмите OK, чтобы сохранить изменения.

  5. Перезапустите 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; }
  • Постройте и выполните проект.

Советы

  1. Переключение Debug/Release:

    • Для каждой конфигурации вручную перепроверьте дополнительные зависимости (Debug требует d-версии библиотек).

  2. Проблемы с wtdbo.dll:

    • Если при запуске программа выдаёт ошибку «не обнаружена wtdbo.dll»:

      • Проверьте, что файл wtdbo.dll (или wtdbod.dll для Debug) находится в C:\Program Files\Wt 4.11.1 msvs2022 x64\bin.

      • Либо добавьте этот путь в переменную среды Path, либо скопируйте DLL в ту же папку, где находится ваш исполняемый файл (но это костыли).

  3. Отладка PostgreSQL:

    • Убедитесь, что PostgreSQL запущен, и все параметры подключения (хост, порт, база данных, пользователь, пароль) верны.

  4. Кириллица и С++:

    • Вообще не советую, но пример выше в коде 🙂

Теперь ваш проект с Wt должен работать корректно! Если кто знает как делать всё это без костылей на костыльной ОП, то жду ваших комментариев:)


ссылка на оригинал статьи https://habr.com/ru/articles/859894/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *