Замечания для пользователей Windows
Введение
Существует несколько важных различий между операционными системами Windows и POSIX, которые могут влиять на работу.
- Использование DLL вместо общих объектов ELF
- Версии Debug и Release для MSVC
Использование DLL
Прежде всего, я настоятельно рекомендую использовать CppCMS как DLL вместо статических библиотек:
- Он позволяет использовать динамически загружаемые view
- Он позволяет вам переключать версию dll CppCMS без перекомпиляции приложения, например, из-за обновления безопасности.
- Это упрощает обработку зависимостей, например, вы не должны вручную линковаться с zlib, pcre и необязательным openssl или ICU.
Компиляция
Когда вы компилируете свою программу для использования DLL, вы должны добавить define DLL_EXPORT
на уровне вашего проекта. Таким образом,
код будет скомпилирован с этим define.
Он должен быть определен для всех исходных файлов включая динамически загружаемые view.
При использовании компилятора Visual C++, убедитесь, что
используете "Enable C++ Exceptions", установив аргумент командной строки /EHsc
.
cl /EHsc -DDLL_EXPORT app.cpp cppcms.lib booster.lib
Соглашение об именах библиотек
По умолчанию собираются и статические библиотеки и DLL с библиотеками импорта, у них есть следующая конвертация имен:
GCC/MinGW:
libcppcms.dll
иlibbooster.dll
- DLLlibcppcms.dll.a
иlibbooster.dll.a
- библиотеки импорта для DLLlibcppcms.a
иlibbooster.a
- статические библиотеки
MSVC:
Release-версии
cppcms.dll
иbooster.dll
- DLLcppcms.lib
иbooster.lib
- библиотеки импорта для DLLlibcppcms.lib
иlibbooster.lib
- статические библиотеки
Debug-версии
cppcms-d.dll
andbooster-d.dll
- DLLcppcms-d.lib
andbooster-d.lib
- библиотеки импорта для DLLlibcppcms-d.lib
andlibbooster-d.lib
- статические библиотеки
Cygwin:
cygcppcms-1.dll
иcygbooster-0.dll
- DLLlibcppcms.dll.a
иlibbooster.dll.a
- библиотеки импорта для DLLlibcppcms.a
иlibbooster.a
- статические библиотеки
Убедитесь, что:
- Не смешиваете статические и библиотеки импорта
- Не смешиваете библиотеки debug и release при использовании компилятора Visual C++.
Сборка и использование CppCMS в Visual Studio
Visual Studio - единственный существующий компилятор у которого несовместимы debug и release библиотеки времени выполнения и требующий их раздельную компиляцию и линковку.
Т.о. чтобы корректно собрать CppCMS, убедитесь:
- Что используете nmake-файлы CMake генератора и не используете Visual Studio Projects
- Что у вас есть все зависимые библиотеки (icu, zlib, pcre, openssl) собранные с соответствующей debug и release версией.
- Что запускаете две независимые компиляции - одну для debug и одну для release.
Моя личная рекомендация - создать набор debug и release библиотек в некотором месте, например:
c:\apps\debug c:\apps\debug\include c:\apps\debug\lib c:\apps\debug\bin
Со всеми debug версиями библиотек типа pcre, zlib и т.д., например c:\apps\debug\bin\pcred.dll
И то же самое для release:
c:\apps\release c:\apps\release\include c:\apps\release\lib c:\apps\release\bin
Т.о. pcre.dll переходит в c:\apps\release\bin\pcre.dll
И затем запускаем две раздельных сборки:
Для debug, открываем терминал и запускаем:
cd z:\mybuilds\cppcms-1.0.1\ mkdir Debug cd Debug set PATH=c:\apps\debug\bin;%PATH% cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INCLUDE_PATH=c:/apps/debug/include -DCMAKE_LIBRARY_PATH=c:/apps/debug/lib -DCMAKE_INSTALL_PREFIX=c:/apps/debug .. nmake nmake test nmake install
Затем делаем то же самое для release - открываем отдельный терминал и запускаем:
cd z:\mybuilds\cppcms-1.0.1\ mkdir Release cd Release set PATH=c:\apps\release\bin;%PATH% cmake -G "NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INCLUDE_PATH=c:/apps/release/include -DCMAKE_LIBRARY_PATH=c:/apps/release/lib -DCMAKE_INSTALL_PREFIX=c:/apps/release .. nmake nmake test nmake install
Это должно значительно упростить вашу жизнь.
← Поиск неисправностей | Наверх | Hello World →