Для начала возьмем самое простое -- скомпилируем под QT Creator+MinGW примеры POCO
(http://pocoproject.org/download/index.html)
poco-1.4.3p1.zip │4176 K
содержит в себе следующие компоненты
║.. │readme
║build │version
║contrib │
║CppUnit │
║doc │
║Foundation │
║Net │
║patches │
║Util │
║XML │
║build_CE_vs90.cmd │
║build_vcexpress2008.cmd │
║build_vcexpress2010.cmd │
║build_vs100.cmd │
║build_vs71.cmd │
║build_vs80.cmd │
║build_vs90.cmd │
║buildvms.com │
║buildwin.cmd │
║changelog │
║components │
║configure │
║contributors │
║DLLVersion.rc │
║libversion │
║license │
║Makefile │
║manifest │
║news │
Платный, поэтому по определению не интересует
Нас же интересует
poco-1.4.3p1-all.zip │7003 K
.. │libversion
build │license
contrib │Makefile
CppUnit │manifest
Crypto │news
Data │readme
doc │version
Foundation │
Net │
NetSSL_OpenSSL │
PageCompiler │
patches │
Util │
XML │
Zip │
build_CE_vs90 cmd│
build_vcexpress2008 cmd│
build_vcexpress2010 cmd│
build_vs100 cmd│
build_vs71 cmd│
build_vs80 cmd│
build_vs90 cmd│
buildvms com│
buildwin cmd│
changelog │
components │
configure │
contributors │
DLLVersion rc │
Как видем из списка файлов дистрибьютив не заточен под компиляцию в QT Creator+MinGW.
Что же делать? Писать проекты/makefile в ручную?
Обратимся к мировому разуму:
http://gluescript.sourceforge.net/?q=node/22
Похожую проблему народ поборол используя Premake4 (http://industriousone.com/premake/download) и скрипт на lua (http://gluescript.svn.sourceforge.net/viewvc/gluescript/trunk/src/poco.zip?view=log)
Но проблему побороли не до конца и не на той версии POCO и как следствие скрипты оказались не совсем корректными.
Пришлось с бубном и матом, методом проб и ошибок писать свои скрипты:
http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar
Потребуется:
http://sourceforge.net/projects/premake/files/Premake/4.3/premake-4.3-windows.zip/download
premake-4.3-windows.zip │ 90861
в котором лежит
premake4.exe │261632
и собственно сами новые скрипты lua http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar
кладем скрипты по директориям а дальше в корневой директории POCO запускаем
C:\premake4\premake4.exe gmake
В результате будут созданы файлы Makefile, которые и будут использоваться для начальной компиляции библиотеки.
Компиляция самого примера это тоже не для слабонервных
Открываем в самом интерфейсе QT Creator файл проекта *.pro и добавляем библиотеки *.lib/*.a (правой кнопкой мышки) (помечено оранжевым цветом) и руками переменные (помечено синим цветом), затем дошкуриваем руками. Обратите внимание, что руками добавляются библиотеки POCO, WinSocket'а и библиотеки openssl. Как это сделать автоматом я так и не смог понять.
#-------------------------------------------------
#
# Project created by QtCreator 2012-07-03T16:48:27
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = sslprj02
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
WINVER = 0x0501
_WIN32_WINNT = 0x0501
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mtd
INCLUDEPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
DEPENDPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mtd
INCLUDEPATH += $$PWD/../poco/Crypto/include/
DEPENDPATH += $$PWD/../poco/Crypto/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mtd
INCLUDEPATH += $$PWD/../poco/Net/include/
DEPENDPATH += $$PWD/../poco/Net/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mtd
INCLUDEPATH += $$PWD/../poco/Util/include/
DEPENDPATH += $$PWD/../poco/Util/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mtd
INCLUDEPATH += $$PWD/../poco/XML/include/
DEPENDPATH += $$PWD/../poco/XML/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mtd
INCLUDEPATH += $$PWD/../poco/Foundation/include/
DEPENDPATH += $$PWD/../poco/Foundation/include/
#-------------------------------------------------
win32: LIBS += -LC:/openssl/lib/ -lssleay32
win32: LIBS += -LC:/openssl/lib/ -llibeay32
INCLUDEPATH += c:/openssl/include/
DEPENDPATH += c:/openssl/include/
win32: LIBS += -LD:/QtSDK/mingw/lib/ -lws2_32
win32: LIBS += -LD:/QtSDK/mingw/lib/ -liphlpapi
В файле *.cpp до #include вставляем строку
#define _WIN32_WINNT 0x0501
(http://pocoproject.org/download/index.html)
Basic Edition
No external dependencies — start developing immediately
|
---|
poco-1.4.3p1.zip │4176 K
содержит в себе следующие компоненты
║.. │readme
║build │version
║contrib │
║CppUnit │
║doc │
║Foundation │
║Net │
║patches │
║Util │
║XML │
║build_CE_vs90.cmd │
║build_vcexpress2008.cmd │
║build_vcexpress2010.cmd │
║build_vs100.cmd │
║build_vs71.cmd │
║build_vs80.cmd │
║build_vs90.cmd │
║buildvms.com │
║buildwin.cmd │
║changelog │
║components │
║configure │
║contributors │
║DLLVersion.rc │
║libversion │
║license │
║Makefile │
║manifest │
║news │
Professional Edition
Includes additional powerful libraries and tools
|
---|
Нас же интересует
Complete Edition
Requires OpenSSL, MySQL Client and ODBC
|
---|
poco-1.4.3p1-all.zip │7003 K
.. │libversion
build │license
contrib │Makefile
CppUnit │manifest
Crypto │news
Data │readme
doc │version
Foundation │
Net │
NetSSL_OpenSSL │
PageCompiler │
patches │
Util │
XML │
Zip │
build_CE_vs90 cmd│
build_vcexpress2008 cmd│
build_vcexpress2010 cmd│
build_vs100 cmd│
build_vs71 cmd│
build_vs80 cmd│
build_vs90 cmd│
buildvms com│
buildwin cmd│
changelog │
components │
configure │
contributors │
DLLVersion rc │
ГРАБЛИ №1
Как видем из списка файлов дистрибьютив не заточен под компиляцию в QT Creator+MinGW.
Что же делать? Писать проекты/makefile в ручную?
Обратимся к мировому разуму:
http://gluescript.sourceforge.net/?q=node/22
Похожую проблему народ поборол используя Premake4 (http://industriousone.com/premake/download) и скрипт на lua (http://gluescript.svn.sourceforge.net/viewvc/gluescript/trunk/src/poco.zip?view=log)
Но проблему побороли не до конца и не на той версии POCO и как следствие скрипты оказались не совсем корректными.
Пришлось с бубном и матом, методом проб и ошибок писать свои скрипты:
http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar
Потребуется:
http://sourceforge.net/projects/premake/files/Premake/4.3/premake-4.3-windows.zip/download
premake-4.3-windows.zip │ 90861
в котором лежит
premake4.exe │261632
и собственно сами новые скрипты lua http://www.dymovoy.ru/download/premake4_lua_poco-1.4.3p1-all.rar
кладем скрипты по директориям а дальше в корневой директории POCO запускаем
C:\premake4\premake4.exe gmake
В результате будут созданы файлы Makefile, которые и будут использоваться для начальной компиляции библиотеки.
ГРАБЛИ №2
Обратите внимание, что стоит в файлах lua
"WINVER=0x0501",
Это означает что версия ОС у нас не ниже Windows XP.
Это реальный баг MinGW: по умолчанию переменная WINVER=0x0500 и как следствие Windows2000, а MinGW не умеет корректно работать со стеком в Windows2000.
Поэтому компиляцию нужно проводить из батника !build_mingw.bat
@echo off
setlocal
set OPENSSL_DIR=c:\openssl
set OPENSSL_INCLUDE=%OPENSSL_DIR%\include
set OPENSSL_LIB=%OPENSSL_DIR%\lib
set INCLUDE=%INCLUDE%;%OPENSSL_INCLUDE%
set LIB=%LIB%;%OPENSSL_LIB%
set POCO_BASE=%CD%
set PATH=D:\QtSDK\mingw\bin\;%POCO_BASE%\bin;%PATH%
set PLATFORM=Win32
set POCO_OS_FAMILY_WINDOWS=1
set Win32=0x0501
set MINGW32=0x0501
set POCO_VXWORKS=
set _WIN32_WINNT=0x0501
C:\premake4\premake4.exe gmake
mingw32-make.exe config=release
mingw32-make.exe
endlocal
в результате в директории ...\poco\lib\ должны появиться откомпилированные файлы *.a, которые я руками переименовал в *.lib (я это понял уже потом что нужно переименовать -- QT Creator не хотел их добавлять в проект)
libPoco_CppUnit_mt lib│216938
libPoco_CppUnit_mtd lib│216938
libPoco_Crypto_mt lib│382736
libPoco_Crypto_mtd lib│389834
libPoco_Data_mt lib│1360 K
libPoco_Data_mtd lib│1379 K
libPoco_Foundation_mt lib│4320 K
libPoco_Foundation_mtd lib│4411 K
libPoco_Net_mt lib│2791 K
libPoco_Net_mtd lib│2841 K
libPoco_NetSSL_mt lib│ 984 K
libPoco_NetSSL_mtd lib│1000 K
libPoco_PageCompiler_mt lib│151998
libPoco_PageCompiler_mtd lib│154900
libPoco_Util_mt lib│1537 K
libPoco_Util_mtd lib│1556 K
libPoco_XML_mt lib│1492 K
libPoco_XML_mtd lib│1531 K
libPoco_Zip_mt lib│1232 K
libPoco_Zip_mtd lib│1249 K
ГРАБЛИ №3
Компиляция самого примера это тоже не для слабонервных
Открываем в самом интерфейсе QT Creator файл проекта *.pro и добавляем библиотеки *.lib/*.a (правой кнопкой мышки) (помечено оранжевым цветом) и руками переменные (помечено синим цветом), затем дошкуриваем руками. Обратите внимание, что руками добавляются библиотеки POCO, WinSocket'а и библиотеки openssl. Как это сделать автоматом я так и не смог понять.
#-------------------------------------------------
#
# Project created by QtCreator 2012-07-03T16:48:27
#
#-------------------------------------------------
QT += core
QT -= gui
TARGET = sslprj02
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp
WINVER = 0x0501
_WIN32_WINNT = 0x0501
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_NetSSL_mtd
INCLUDEPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
DEPENDPATH += $$PWD/../poco/NetSSL_OpenSSL/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Crypto_mtd
INCLUDEPATH += $$PWD/../poco/Crypto/include/
DEPENDPATH += $$PWD/../poco/Crypto/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Net_mtd
INCLUDEPATH += $$PWD/../poco/Net/include/
DEPENDPATH += $$PWD/../poco/Net/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Util_mtd
INCLUDEPATH += $$PWD/../poco/Util/include/
DEPENDPATH += $$PWD/../poco/Util/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_XML_mtd
INCLUDEPATH += $$PWD/../poco/XML/include/
DEPENDPATH += $$PWD/../poco/XML/include/
#-------------------------------------------------
#-------------------------------------------------
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mt
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../poco/lib/ -llibPoco_Foundation_mtd
INCLUDEPATH += $$PWD/../poco/Foundation/include/
DEPENDPATH += $$PWD/../poco/Foundation/include/
#-------------------------------------------------
win32: LIBS += -LC:/openssl/lib/ -lssleay32
win32: LIBS += -LC:/openssl/lib/ -llibeay32
INCLUDEPATH += c:/openssl/include/
DEPENDPATH += c:/openssl/include/
win32: LIBS += -LD:/QtSDK/mingw/lib/ -lws2_32
win32: LIBS += -LD:/QtSDK/mingw/lib/ -liphlpapi
В файле *.cpp до #include вставляем строку
#define _WIN32_WINNT 0x0501
чтобы уж быть точно уверенным.
ГРАБЛИ №4
Перед запуском в отладке или просто так убедитесь, что у вас доступны DLL (прописана директория в переменной PATH или лежат в текущей директории) следующие файлы:
СКЗИ МагПро КриптоПакет он же openssl 0.9.8e
cryptoeay32-0.9.8.dll │1387 K
ssleay32-0.9.8.dll │330426
zlib1.dll │ 73216
Основные куски библиотек MinGW
libgcc_s_dw2-1.dll │ 43008
mingwm10.dll │ 11362
Основные библиотеки QT (большая часть не нужна, но на всякий случай положите в доступную папку)
phonon4.dll │344576
QtCore4.dll │2492 K
QtDeclarative4.dll │2995 K
QtGui4.dll │9619 K
QtMultimedia4.dll │174080
QtNetwork4.dll │1181 K
QtOpenGL4.dll │912384
QtScript4.dll │2126 K
QtScriptTools4.dll │745984
QtSql4.dll │271872
QtSvg4.dll │373248
QtWebKit4.dll │ 17 M
QtXml4.dll │399360
QtXmlPatterns4.dll │3912 K
cryptoeay32-0.9.8.dll │1387 K
ssleay32-0.9.8.dll │330426
zlib1.dll │ 73216
libgcc_s_dw2-1.dll │ 43008
mingwm10.dll │ 11362
Основные библиотеки QT (большая часть не нужна, но на всякий случай положите в доступную папку)
phonon4.dll │344576
QtCore4.dll │2492 K
QtDeclarative4.dll │2995 K
QtGui4.dll │9619 K
QtMultimedia4.dll │174080
QtNetwork4.dll │1181 K
QtOpenGL4.dll │912384
QtScript4.dll │2126 K
QtScriptTools4.dll │745984
QtSql4.dll │271872
QtSvg4.dll │373248
QtWebKit4.dll │ 17 M
QtXml4.dll │399360
QtXmlPatterns4.dll │3912 K
Обратите внимание, что при запуске откомпилированного в DEBUG режиме файла нужно чтобы были еще доступны соответствующие библиотеки с буковкой <d>.
Пример:
....
QtCored4.dll │ 30 M
QtGuid4.dll │ 148 M
QtSvgd4.dll │5475 K
QtNetworkd4.dll │ 19 M
....ГРАБЛИ №5
Под гостевой ОС Windows XP откомпилированный пример работает нормально, под основной ОС Windows 7 пример вываливается с ошибкой:
I/O error: Permission denied
Так что есть еще с чем бороться %)
Огромное спасибо за скрипты для POCO, респект))
ОтветитьУдалить