Скомпилируйте 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:

  1. Извлеките Poco в папку по вашему выбору. C:/ для этого примера.
  2. Примените следующий путь, чтобы избежать ошибки 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
    }
    
  3. Измените конфигурацию 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.

  4. Скомпилируйте 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) $@$
Другие вопросы по тегам