<!--toc-->
|
|
## Введение
|
|
Существует несколько важных различий между операционными системами Windows и POSIX, которые могут влиять на работу.
|
|
1. Использование DLL вместо общих объектов ELF
|
2. Версии Debug и Release для MSVC
|
|
## Использование DLL
|
|
Прежде всего, я настоятельно рекомендую использовать CppCMS как DLL вместо статических библиотек:
|
|
1. Он позволяет использовать динамически загружаемые view
|
2. Он позволяет вам переключать версию dll CppCMS без перекомпиляции приложения, например, из-за обновления безопасности.
|
3. Это упрощает обработку зависимостей, например, вы не должны вручную линковаться с 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` - DLL
|
- `libcppcms.dll.a` и `libbooster.dll.a` - импортируемые библиотеки для DLL
|
- `libcppcms.dll.a` и `libbooster.dll.a` - библиотеки импорта для DLL
|
- `libcppcms.a` и `libbooster.a` - статические библиотеки
|
|
MSVC:
|
|
- Release-версии
|
|
- `cppcms.dll` и `booster.dll` - DLL
|
- `cppcms.lib` и `booster.lib` - импортируемые библиотеки для DLL
|
- `cppcms.lib` и `booster.lib` - библиотеки импорта для DLL
|
- `libcppcms.lib` и `libbooster.lib` - статические библиотеки
|
|
- Debug-версии
|
|
- `cppcms-d.dll` and `booster-d.dll` - DLL
|
- `cppcms-d.lib` and `booster-d.lib` - импортируемые библиотеки для DLL
|
- `cppcms-d.lib` and `booster-d.lib` - библиотеки импорта для DLL
|
- `libcppcms-d.lib` and `libbooster-d.lib` - статические библиотеки
|
|
Cygwin:
|
|
- `cygcppcms-1.dll` и `cygbooster-0.dll` - DLL
|
- `libcppcms.dll.a` и `libbooster.dll.a` - импортируемые библиотеки для DLL
|
- `libcppcms.dll.a` и `libbooster.dll.a` - библиотеки импорта для DLL
|
- `libcppcms.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
|
|
Это должно значительно упростить вашу жизнь.
|
|
---
|
|
← [Поиск неисправностей][prev]
|
| [ Наверх](#maincontent)
|
| [Hello World][next] →
|
|
[prev]: /wikipp/en/page/ccppcms_1x_build_troubleshooting
|
[next]: /wikipp/en/page/cppcms_1x_tut_hello |