在Windows上使用MinGW编译Poco

cab*_*013 5 qt mingw poco-libraries

我需要用MinGW编译poco,所以我可以在Qt Creator中使用它,但无法弄清楚如何,我已经设法在Visual Studio中编译poco但我不能在Qt Creator中使用这些库.

Ces*_*tiz 8

有了这个环境:

  • MinGW(GCC 4.7.0)+ MSYS
  • Poco 1.4.6(2013年5月下载)

这是我为MinGW和Windows 7配置和编译Poco的方法:

  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
    }
    
    Run Code Online (Sandbox Code Playgroud)

    在这里:

    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
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在C:\ poco-1.4.6\build\config\MinGW修改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
    
    Run Code Online (Sandbox Code Playgroud)

    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
    
    Run Code Online (Sandbox Code Playgroud)

    如果您不需要使用加密和SSL,则应删除SYSLIBS行中的-lssl-lcrypto选项.

  4. 无需演示,SSL,加密和ODBC支持即可编译Poco:

    $ ./configure --omit=NetSSL_OpenSSL,Crypto,Data/ODBC,Data/MySQL --prefix=./_INSTALL
    $ make clean
    $ make -j4 -nodemos
    $ make install
    
    Run Code Online (Sandbox Code Playgroud)

祝好运!


PCa*_*ano 3

补充塞萨尔的答案(在这里,不是为了格式化目的而添加注释),您的 .pro 文件中需要这样的内容:

INCLUDEPATH += "<path_to_poco_include_dir>"
LIBS += -L"<path_to_poco_lib_dir>" -l<poco_lib> -l<poco_lib>
Run Code Online (Sandbox Code Playgroud)

例如,就我而言,我会这样(用于调试版本):

INCLUDEPATH += "C:/Dev/lib/poco/poco143/Debug/include"
LIBS += -L"C:/Dev/lib/poco/poco143/lib" -lPocoFoundationd -lPocoUtild
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过为调试和发布版本创建设置来对此进行一些改进:

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}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助。