Скомпилируйте Poco с MinGW в Windows
Мне нужно скомпилировать poco с MinGW, чтобы я мог использовать его в Qt Creator, но не могу понять, как, мне удалось скомпилировать poco в Visual Studio, но я не могу использовать эти библиотеки в Qt Creator.
4 ответа
В дополнение к ответу Сезара (здесь, вместо добавления комментария, для форматирования) вам нужно что-то вроде этого в вашем файле.pro:
INCLUDEPATH += "<path_to_poco_include_dir>"
LIBS += -L"<path_to_poco_lib_dir>" -l<poco_lib> -l<poco_lib>
Например, в моем случае у меня было бы это (для отладочных сборок):
INCLUDEPATH += "C:/Dev/lib/poco/poco143/Debug/include"
LIBS += -L"C:/Dev/lib/poco/poco143/lib" -lPocoFoundationd -lPocoUtild
Затем вы можете немного уточнить это, создав параметры для сборок отладки и выпуска:
LIB_HOME = "C:/Dev/lib/"
POCO_HOME = $${LIB_HOME}poco/poco143/
# SEE http://www.qtcentre.org/threads/23655-Does-Qt-Creator-understand-debug-release-scopes-in-pro-files
# OR http://www.qtcentre.org/threads/30430-How-to-set-pro-file-about-debug-and-release
####
CONFIG(debug, debug|release) {
CONFIG -= debug release
CONFIG += debug
}
CONFIG(release, debug|release) {
CONFIG -= debug release
CONFIG += release
}
####
debug {
POCO_DEBUG = d
POCO_PATH = $${POCO_HOME}Debug
}
release {
POCO_DEBUG =
POCO_PATH = $${POCO_HOME}Release
}
INCLUDEPATH += "$${POCO_PATH}/include"
LIBS += -L"$${POCO_PATH}/lib" -lPocoFoundation$${POCO_DEBUG} -lPocoUtil$${POCO_DEBUG}
Надеюсь это поможет.
С этой средой:
- MinGW (GCC 4.7.0) + MSYS
- Poco 1.4.6 (загружено 5 февраля 2013 г.)
Вот как я настраиваю и собираю Poco для MinGW и Windows 7:
- Извлеките Poco в папку по вашему выбору. C:/ для этого примера.
Примените следующий путь, чтобы избежать ошибки copysign.(Из https://github.com/pocoproject/poco/issues/57).
В файле C:\poco-1.4.6\Foundation\include\Poco\FPEnvironment_DUMMY.h
Удалите строку std:: в этом методе:
inline float FPEnvironmentImpl::copySignImpl(float target, float source) { #if defined(__APPLE__) || defined(POCO_ANDROID) return copysignf(target, source); #else return /*std::*/copysignf(target, source); #endif }
И здесь тоже:
inline double FPEnvironmentImpl::copySignImpl(double target, double source) { #if defined(__APPLE__) || defined(POCO_ANDROID) return copysign(target, source); #else return /*std::*/copysign(target, source); #endif }
Измените конфигурацию MinGW в C:\poco-1.4.6\build\config\MinGW. (Из http://cidebycide.blogspot.com.es/2012/06/building-poco-c-witn-mingw.html)
Вы должны удалить строку -mno-cygwin в строке:
SHLIB = $(CXX) -shared -mno-cygwin -o $@ -Wl,--out-implib=$(dir $@)$(subst cyg,lib,$(basename $(notdir $@))).a
а также
SYSFLAGS = -mno-cygwin -D_WIN32 -DMINGW32 -DWINVER=0x500 -DPOCO_NO_FPENVIRONMENT -DPCRE_STATIC -DPOCO_THREAD_STACK_SIZE -DFoundation_Config_INCLUDED -I/usr/local/include -I/usr/include
Если вам не нужно использовать криптографию и SSL, вы должны удалить опции -lssl и -lcrypto в строке SYSLIBS.
Скомпилируйте Poco без демонстраций, SSL, криптографии и поддержки ODBC:
$ ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL --prefix=./_INSTALL $ make clean $ make -j4 -nodemos $ make install
Удачи!
Построение POCO с MinGW не должно быть большим делом, это было сделано в прошлом, но у разработчиков ядра нет стимулов (не наш "зуд"), и никто из тех, кто жаловался, не собирается создавать и поддерживать сборку MinGW; мы более чем приветствовали бы кого-то, кто принял эту роль. Все желающие могут связаться со мной.
Существует пакет MSYS2, предоставляющий все необходимое для установки текущей (на момент написания) библиотеки POCO C++ 1.9.0.
- Чтобы установить этот пакет, сначала необходимо загрузить и установить MSYS2 с http://www.msys2.org/.
- С помощью
pacman
(они интегрировали порт диспетчера пакетов Arch Linux), вы можете определить пакет POCO C++, который вы хотите установить:pacman -Ss poco
возвращает вам список пакетов, в которых poco является частью имени. Это может выглядеть следующим образом:
$ pacman -Ss poco
mingw32/mingw-w64-i686-poco 1.9.0-1
POrtable COmponents C++ Libraries (mingw-w64)
mingw64/mingw-w64-x86_64-poco 1.9.0-1
POrtable COmponents C++ Libraries (mingw-w64)
- Я хотел установить 64-битный пакет с именем
mingw64/mingw-w64-x86_64-poco
и поэтому использовал pacman для его установки:
$ pacman -S mingw64/mingw-w64-x86_64-poco
Это устанавливает, однако, предварительно собранную, динамическую версию POCO C++. В моей системе библиотеки оказались в каталоге установки msys2
C:\msys64\mingw64\bin
(DLL пришли сюда)C:\msys64\mingw64\lib
(.а пришел сюда)
Там может быть ошибка, как следует:
strip: '/Learn/POCO/poco-1.4.6p2/lib/MinGW/ia32/libPocoFoundation.dll.exe': такого файла нет
мы можем решить проблему, изменив строку в файле "build\rules\global"
STRIPCMD = $(STRIP) $@$(BINEXT)
в
STRIPCMD = $(STRIP) $@$