QGIS2.3+VS2010+Win7编译

原文地址: http://blog.csdn.net/bjlqw/article/details/23560667

QGIS2.3.0官方推荐采用VS2008进行编译,GUI使用Qt4.7.1-VS2008,脚本使用Python2.7.4。QGIS 插件包括CPP插件和Python插件两种,使用Qt4加载CPP插件,使用Python2加载Python插件,有些Python插件(例如processing插件)依赖于PyQt4,PyQt4依赖于Qt4-VS2008。QGIS的有些依赖库(例如Qwt5)依赖于Qt4-VS2008。

若采用VS2010直接进行编译,在调用QGIS的过程中会出现兼容性错误,例如加载processing插件时引起异常中断错误,导致程序崩溃。

安装Qt4.8.5-VS2010之后,采用VS2010进行编译,在调用QGIS的过程中依然出现兼容性错误,例如加载Qwt5依赖库时引起异常中断错误,导致程序崩溃。

因此,采用VS2010进行编译之前,需要将Qt4-VS2008更新为Qt4-VS2010版本,包括所有使用了Qt4-VS2008的插件和依赖库。

1、安装CMake 2.8

(1)下载地址:http://www.cmake.org/

(2)安装路径:自定义,例如:C:\GNU\CMake2.8

2、安装GNUWin32 flex 2.5和bison 2.4

(1)下载地址:http://gnuwin32.sourceforge.NET/packages/flex.htm和…/bison.htm

(2)安装路径:自定义,例如:C:\GNU\GnuWin32

说明:Flex/Bison常用安装程序有两种:GnuWin32 Flex 2.5/Bison 2.4和Win flex-bison 2.5 (http://sourceforge.Net/projects/winflexbison/),推荐安装GnuWin32Flex 2.5/Bison 2.4。

3、下载QGIS 2.3源代码

(1)下载地址:https://github.com/qgis/QGIS

(2)解压路径:自定义,例如:C:\qgis230-source\QGIS-master

说明:源代码压缩包中提供了安装说明(QGIS-master\doc\INSTALL.html)。

4、通过OSGeo4W Installer 32bit安装QGIS 2.3依赖库

(1)下载地址:https://trac.osgeo.org/osgeo4w/

(2)运行OSGeo4W,选择Advanced Install -> Install from Internet or Install from LocalDirectory –> Root Directory (Default: C:\OSGeo4W) -> Select Packages: qgis-full-dev。

(3)缺省QGIS 2.3开发包(qgis-full-dev)未安装Qwt5开发包(Qwt5-devel-qt4)和Spatialindex开发包(libspatialindex-devel),需要单独安装这两个开发包。

说明:QGIS依赖库头文件位于C:\OSGeo4W\include路径下,静态库文件位于C:\OSGeo4W\lib路径下,qmake.exe等工具位于C:\OSGeo4W\bin路径下,外部可执行程序包位于C:\OSGeo4W\apps路径下。

5、设置环境变量

(1)打开系统命令提示符,在控制台模式下设置环境变量中

(2)调用OSGeo4W\bin\o4w_env.bat批处理文件,将自动递归调用OSGeo4W \etc\ini*.bat批处理文件,设置OSGeo4W运行环境变量,例如:

call “C:\OSGeo4W\bin\o4w_env.bat”

其中用于CMake生成VS解决方案的变量包括:

OSGEO4W_ROOT=C:\OSGeo4W

PATH=%OSGEO4W_ROOT%\bin;%PATH%

PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27

PATH=%OSGEO4W_ROOT%\apps\Python27\Scripts;%PATH%

说明:CMake使用PYTHONHOME查找SIP包所在路径。

(3)在环境变量INCLUDE和LIB中添加OSGeo4W依赖库头文件和静态库文件所在路径,或者在环境变量PATH中添加依赖库头文件和库文件所在路径。例如:

setINCLUDE=%OSGEO4W_ROOT%\include;%INCLUDE%

set LIB=%OSGEO4W_ROOT%\lib;%LIB%

(4)定义GRASS_PREFIX,例如:

setGRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.3

注意:在GRASS_PREFIX路径中不要使用’\’代替’/’,否则CMake将产生错误。

(5)在环境变量PATH中添加添加GNUWin32 Flex/Bison可执行文件所在路径,例如;

set C:\GNU\GnuWin32\bin

(6)在环境变量PATH中添加CMake可执行文件所在路径,例如:

C:\GNU\CMake2.8\bin

(7)调用VS2010的\VC\vcvarsall.bat批处理文件,将自动递归调用VC\bin\vcvars32.bat和%VS100COMNTOOLS%vsvars32.bat批处理文件,例如:

call “C:\Program Files\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat” x86 或

call “C:\Program Files (x86)\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat” x86

其中用于CMake生成VS解决方案的变量包括:

VS90COMNTOOLS =C:\Program Files\MicrosoftVisual Studio 10.0\Common7\Tools\或

VS90COMNTOOLS =C:\Program Files (x86)\MicrosoftVisual Studio 10.0\Common7\Tools\

LIB=”C:\Program Files\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”或

LIB=”C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”

说明:CMake需要在环境变量PATH或LIB中查找Microsoft SDKs 的SetupAPI.Lib,找到后定义SETUPAPI_LIBRARY变量。

特别注意:系统环境变量PATH中路径之间分号的前后不要加空格,否则CMake解析路径时出现错误。

6、复制GNUWin32 Flex/Bison的unistd.h头文件

QGIS编译时需要GNUWin32Flex/Bison的unistd.h头文件,将GnuWin32\include\unistd.h头文件复制到VC\include路径下,例如:C:\ProgramFiles\Microsoft Visual Studio 10.0\VC\include或C:\Program Files(x86) \Microsoft Visual Studio 10.0\VC\include。

说明:在环境变量INCLUDE或PATH中添加GNUWin32 Flex/Bison的unistd.h头文件所在路径,VS2010编译时仍然找不到unistd.h,因此必须复制该文件。

7、生成QGIS 2.3.0解决方案

(1)开cmake-gui应用程序;

(2)在where is the source code中输入源代码根路径,例如:D:/dev_qgis/qgis230-source/QGIS-master;

(3)在where to build the binaries中输入编译根路径,例如:D:/dev_qgis/qgis-source230/build;

(4)选中Grouped复选框,按分组显示列表,使用默认选项。

(5)点击Configure按钮,选择Visual Studio 10,应该顺利通过;

(6)点击Generate按钮,生成qgis2.3.0.sln解决方案。

说明:可以采用基本编译选项,打开With组,仅选中WITH_DESKTOP, WITH_INTERNAL_HTTPLIB, WITH_INTERNAL_QEXTSERIALPORT,WITH_ INTERNAL_QWTPOLAR。

8、编译QGIS 2.3.0解决方案

(1)通过VS2010打开qgis2.3.0.sln解决方案

(2)将解决方案配置由Debug改为RelWithDebInfo (Release with Debug Info)

(3)编译默认解决方案

说明:由于OSGeo4W仅提供了release依赖库,RelWithDebInfo配置使用release依赖库,还保留了调试信息,可以调试QGIS,推荐采用该配置。

问题1:CMake生成QGIS解决方案时,找不到flex

分析原因:在QGIS-master\CMakeLists.txt中通过 INCLUDE(Flex)调用QGIS-master\cmake\ Flex.cmake 模块,在 Flex.cmake 中通过FIND_PROGRAM命令查找flex.exe可执行文件所在目录:

FIND_PROGRAM(FLEX_EXECUTABLE

    NAMES flex.exe

    PATHS$ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin)

由于未在环境变量PATH指定flex所在路径,所以找不到flex。

解决方法:在环境变量PATH添加flex所在路径,例如:

set PATH=C:\GNU\GnuWin32\bin;%PATH%

问题2:CMake生成QGIS解决方案时,找不到bison

分析原因:在QGIS-master\CMakeLists.txt中,过 INCLUDE(Bison)调用QGIS-master\cmake\ Bison.cmake模块,在Bison.cmake中通过FIND_PROGRAM命令查找bison.exe可执行文件所在目录:

FIND_PROGRAM(BISON_EXECUTABLE PATHS

 NAMES bison.exe

 PATHS $ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin

由于未在环境变量PATH指定bison所在路径,所以找不到bison。

解决方法:在环境变量PATH添加bison所在路径,例如:

set PATH=C:\GNU\GnuWin32\bin;%PATH%

问题3:CMake生成QGIS解决方案时,未定义GEOS_INCLUDE_DIR和GEOS_LIBRARY

分析原因:在QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(GEOS)调用QGIS-master \cmake\ FindGEOS.cmake模块,在FindGEOS.cmake中通过FIND_PATH命令查找GEOS头文件,通过和FIND_LIBRARY命令查找GEOS库文件:

IF(MSVC)

FIND_PATH(GEOS_INCLUDE_DIR geos_c.h ENVLIBDIR/include ENV{INCLUDE})

FIND_LIBRARY(GEOS_LIBRARY NAMES geos geos_c_i geos_c PATHS

 "$ENV{LIB_DIR}/lib"

 $ENV{LIB})

ENDIF (MSVC)

遍历CMake缺省路径和PATHS指定路径,并将结果保存到GEOS_INCLUDE_DIR和GEOS_LIBRARY中。

由于未在环境变量PATH中添加依赖库头文件和库文件所在路径,导致找不到GEOS库。

解决方法1:在环境变量INCLUDE和LIB中添加OSGeo4W依赖库所在路径,例如:

set OSGEO4W_ROOT=C:\OSGeo4W

setINCLUDE=%OSGEO4W_ROOT%\include;%INCLUDE%

set LIB=%OSGEO4W_ROOT%\lib;%LIB%

解决方法2:在环境变量PATH中添加OSGeo4W依赖库所在路径,例如:

set PATH=%OSGEO4W_ROOT%\include;%PATH%

set PATH=%OSGEO4W_ROOT%\lib;%PATH%

问题4:CMake生成QGIS解决方案时,找不到PYTHON_EXECUTABLE

分析原因:在QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(PythonInterpREQUIRED)调用CMake的FindPythonInterp.cmake模块,在FindPythonInterp.cmake中通过find_program命令查找Python可执行文件:

find_program(PYTHON_EXECUTABLE NAMES${_Python_NAMES})

解决方法:在环境变量PATH添加python.exe所在路径,例如:

set PATH=%OSGEO4W_ROOT%\bin;%PATH%

注意:当系统中安装了两个版本Python时,假设由OSGeo4W安装了Python2.7.4,由其他程序安装了Python 2.7.2,若环境变量PATH中设置了Python 2.7.2安装路径,可能导致异常问题。建议:从环境变量PATH中删除其他版本Python所在路径,例如:C:\Python27\; C:\Python27\Scripts。

问题5:CMake生成QGIS解决方案时,找不到SIP

分析原因:在QGIS-master\CMakeLists.txt中,如果定义了WITH_BINDINGS,将通过FIND_PACKAGE(SIPREQUIRED)命令调用QGIS-master\cmake\ FindSIP.cmake模块,该模块通过EXECUTE_PROCESS(COMMAND PYTHONEXECUTABLE {_find_sip_py} OUTPUT_VARIABLE sip_config)命令调用python.exe来运行QGIS-master\cmake\FindSIP.py,在FindSIP.py中需要导入sipconfig包,查找sipconfig包时需要使用PYTHONHOME变量,由于未定义该变量而导致找不到SIP。

解决方法:定义环境变量PYTHONHOME,例如:

set PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27

注意:不需要在环境变量PATH中添加Python安装路径。

问题6:CMake生成QGIS解决方案时,未定义QWT_INCLUDE_DIR和QWT_LIBRARY

分析原因:QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(QwtREQUIRED) 加载并运行QGIS-master\cmake\ FindQwt.cmake模块,在FindQwt.cmake中通过FIND_PATH命令查找Qwt头文件,通过FIND_LIBRARY命令查找库文件:

FIND_PATH(QWT_INCLUDE_DIR NAMES qwt.h PATHS

   /usr/include

   /usr/local/include

   "$ENV{LIB_DIR}/include"

   "$ENV{INCLUDE}"

   PATH_SUFFIXES qwt-qt4 qwt qwt5 qwt6)

FIND_LIBRARY(QWT_LIBRARY NAMES qwt qwt5 qwt6 qwt-qt4 qwt5-qt4 PATHS

   /usr/lib

   /usr/local/lib

   "$ENV{LIB_DIR}/lib"

   "$ENV{LIB}" )

遍历CMake缺省路径和PATHS指定路径,并将结果保存到QWT_INCLUDE_DIR和QWT_LIBRARY中。

解决方法1:确保安装了Qwt开发包。

解决方法2:在环境变量INCLUDE和LIB中添加Qwt的头文件和库文件所在路径。

问题7:CMake生成QGIS解决方案时,未定义SPATIALINDEX_INCLUDE_DIR和SPATIALINDEX_LIBRARY

分析原因:QGIS-master\src\core\CMakeLists.txt中通过FIND_PACKAGE(SpatialindexREQUIRED)调用FindSpatialindex.cmake模块,在FindSpatialindex.cmake中通过FIND_LIBRARY查找Spatialindex库文件:

FIND_LIBRARY(SPATIALINDEX_LIBRARY NAMES spatialindex_i spatialindexPATHS

/usr/lib

   /usr/local/lib

“$ENV{LIB_DIR}/lib”

“$ENV{LIB}/lib”

“$ENV{OSGEO4W_ROOT}/lib”)

编译64位QGIS时,使用了spatialindex-64.lib库,因此找不到spatialindex-64.lib库。

解决方法1:确保安装了Spatialindex开发包。

解决方法2:在环境变量INCLUDE和LIB中添加Spatialindex的头文件和库文件所在路径。

解决方法3:在CMake_gui中手工添加spatialindex-64.lib所在路径。

问题8:CMake生成QGIS解决方案时,找不到Qt4

分析原因:在QGIS-master\src\core\CMakeLists.txt中通过FIND_PACKAGE(Qt4${QT_MIN_VERSION} REQUIRED)调用CMake安装路径\share\cmake-2.8\Modules\FindQt.cmake模块,查找Qt 4.7.x以上版本,由于未在环境变量PATH中设置C:\GNU\OSGeo4W\bin路径,找不到qmake.exe,最终导致找不到Qt4。

解决方法:在环境变量PATH中添加OSGeo4W的可执行程序所在路径(bin)。

问题9:CMake生成QGIS解决方案时,未定义SETUPAPI_LIBRARY

分析原因:在QGIS-master\src\core\CMakeLists.txt中通过FIND_LIBRARY(SETUPAPI_LIBRARYNAMES setupapi PATHS $ENV{LIB})查找setupapi库文件。由于未在环境变量PATH中添加Microsoft SDKs库文件所在路径,导致找不到SetupAPI.Lib。

解决方法1:在环境变量LIB或PATH中添加SetupAPI.Lib所在路径,例如:

set PATH= “C:\Program Files\MicrosoftSDKs\Windows\v7.0A\Lib;%PATH%” 或

set PATH= “C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Lib;%PATH%” 或

解决方法2:调用VC变量定义批处理文件,例如:

call “C:\Program Files\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat” x86 或

call “C:\Program Files (x86)\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat” x86

问题10:CMake生成QGIS解决方案时,定义了GRASS_PREFIX,FindGRASS.cmake错误

分析原因:QGIS-master\CMakeLists.txt中通过FIND_PACKAGE(GRASS)加载并运行QGIS-master\cmake\ FindGRASS.cmake模块,在FindGRASS.cmake中通过FIND_PATH命令查找GRASS头文件:

SET (GRASS_PATHS GRASSPREFIX/usr/lib/grass/usr/lib64/grass64/usr/lib/grass64c:/msys/local/opt/grass ENV{GRASS_PREFIX})

IF (WITH_GRASS)

FOREACH (G_PREFIX ${GRASS_PATHS})

IF (NOT GRASS_FOUND)

 CHECK_GRASS(${G_PREFIX})

ENDIF (NOT GRASS_FOUND)

ENDFOREACH (G_PREFIX)

ENDIF (WITH_GRASS)

MACRO (CHECK_GRASS G_PREFIX)

FIND_PATH (GRASS_INCLUDE_DIR grass/version.h ${G_PREFIX}/include)

ENDMACRO (CHECK_GRASS)

遍历GRASS_PATHS指定路径,并将结果保存到GRASS_INCLUDE_DIR中。

由于GRASS_PREFIX路径中包含’/’,导致CMake出现错误。

解决方法1:确保安装了GRASS开发包。

解决方法2:将GRASS_PREFIX中’\’手工替换为‘/’。

问题11:CMake生成QGIS解决方案时,安装了Win flex-bison,找不到flex路径

分析原因:在QGIS-master\CMakeLists.txt中通过 INCLUDE(Flex)调用QGIS-master\cmake\ Flex.cmake 模块,在 Flex.cmake 中通过FIND_PROGRAM命令查找flex.exe可执行文件所在目录:

FIND_PROGRAM(FLEX_EXECUTABLE

    NAMES flex.exe

    PATHS$ENV{LIB_DIR}/bin c:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin)

由于win_flex_bison-2.5.1使用了win_flex.exe文件名,导致无法找到flex.exe所在路径。

解决方法:建议在CMake_gui中手工添加win_flex.exe所在路径。

问题12:CMake生成QGIS解决方案时,安装了Win flex-bison,找不到bison路径

分析原因:在QGIS-master\CMakeLists.txt中,过 INCLUDE(Bison)调用QGIS-master\cmake\ Bison.cmake模块,在Bison.cmake中通过FIND_PROGRAM命令查找bison.exe可执行文件所在目录:

FIND_PROGRAM(BISON_EXECUTABLE PATHS

  NAMES bison.exe

  PATHS $ENV{LIB_DIR}/binc:/cygwin/bin $ENV{PROGRAMFILES}/GnuWin32/bin

由于win_flex_bison-2.5.1使用了win_bison.exe文件名,导致无法找到bison.exe所在路径。

解决方法:建议在CMake_gui中手工添加win_flex.exe所在路径。

问题13:编译QGIS时,找不到unistd.h

分析原因:在QGIS-master\cmake\Flex.cmake 模块中定义宏MACRO(ADD_FLEX_FILES _sources ),在QGIS-master\src\core\CMakeLists.txt中通过宏ADD_FLEX_FILES(QGIS_CORE_SRCSqgsexpressionlexer.ll)生成build\src\core\flex_qgsexpressionlexer.cpp文件,在flex_qgsexpressionlexer.cpp中调用#include

ifdef _MSC_VER

ifdef _DEBUG

undef _DEBUG

endif

endif

在QGIS-master\src\python\qgispython.cpp文件中,未取消_DEBUG定义,因此,导致两个文件的DEBUG版本不匹配。

解决方法1:在qgispython.cpp文件中,取消_DEBUG定义。

解决方法2:在qgspythonutilsimpl.cpp文件中,不取消_DEBUG定义,可能会引起其它问题。

问题17:编译qgispython工程DEBUG版本时,出现error LNK1104: 无法打开文件“python27_d.lib”

分析原因:qgspython依赖于python 2.7的库文件,在pyconfig.h文件中定义DEBUG链编时使用python27.lib库,RELEASE链编时使用python27_d.lib库。

if defined(_MSC_VER)

        /* So MSVC users need not specify the .lib file in

        theirMakefile (other compilers are generally

        takencare of by distutils.) */

ifdef _DEBUG

pragma comment(lib,”python27_d.lib”)

else

pragma comment(lib,”python27.lib”)

endif /* _DEBUG */

endif /* _MSC_VER */

解决方法1:在qgspython工程中取消_DEBUG定义。

解决方法2:修改pyconfig.h文件,将_DEBUG中链接库改为python27.lib,可能会引起其它问题。

说明:编译python_module_qgis_analysis, python_module_qgis_core, python_module_qgis_gui,python_module_qgis_networkanalysis工程时,出现error LNK1104: 无法打开文件“python27_d.lib”,解决方法同上。

问题18:调试QGIS时,通过qgspython.dll加载python27.dll失败

分析原因:通过Depends工具查看QGIS的依赖库(或者在调试状态下查看自动加载的依赖库),发现加载了系统路径下的Python动态库(例如C:\Windows\System32\python27.dll,版本2.7.2),未加载开发环境中的Python动态库(例如C:\GNU\OSGeo4W\bin\python27.dll,版本2.7.4),而两个Python动态库的版本不一致,导致加载失败。

解决方法1:将系统路径下Python动态库移到其他路径下。

解决方法2:使用开发环境中Python动态库覆盖系统路径下Python动态库。

问题19:调试QGIS时,加载qgis.core模块失败:无法载入PyQGIS,Python支持将被禁用

分析原因:QGIS未生成qgis.core模块

解决方法:QGIS通过python_module_qgis_core工程生成qgis.core模块,例如D:\dev_qgis\qgis-source230\build\output\python\qgis\core.pyd。

问题20:在Python中加载qgis.core模块出现错误:ImportError: No module named qgis.core

分析原因:qgis.core模块不在Python搜索路径中,qgis.core模块是…\qgis\core.pyd文件。

解决方法1:定义PYTHONPATH变量保存qgis.core模块所在路径,例如:D:\dev_qgis\qgis-source230\build\output\python

注意:必须定义PYTHONPATH变量,不需要在PATH变量中添加qgis.core模块所在路径。

问题21:在Python中加载qgis.core模块出现错误:ImpotError: DLL load failed

分析原因:通过Depends工具查看…\qgis\core.pyd的依赖库,发现需要调用qgis_core.dll动态库。

解决方法:在系统PATH变量中添加qgis_core.dll动态库所在路径例如:D:\dev_qgis\qgis-source230\build\output\bin\RelWithDebInfo

注意:必须在PATH变量中添加,不需要在PYTHONPATH变量中添加qgis_core.dll动态库所在路径。

问题22:无法启动应用程序qgis.exe

详细错误信息:由于应用程序配置不正确,未能启动此应用程序。请查看清单文件以查找可能的错误。重新安装该应用程序可能修复此问题。有关更多信息,请参见应用程序事件日志。

分析原因:打开Windows的“事件查看器”,在“Windows日志”->“应用程序”中查看qgis.exe引起的详细错误信息:

qgis.exe的激活上下文生成失败。 找不到从属程序集Microsoft.VC90.DebugCRT,processorArchitecture=”x86”,publicKeyToken=”1fc8b3b9a1e18e3b”,type=”win32”,version=”9.0.21022.8”。 请使用 sxstrace.exe 进行详细诊断。

分析发现qgis.exe编译时需要链接Qt的QtUiToolsd.lib库,该库运行时需要调用VS2008的调试版运行库(Microsoft.VC90.DebugCRT),而VS2008可再发行组件包不包含调试版运行库,因此出现错误。

解决方法1:通过OSGeo卸载Qt 4模块,安装Qt 4 SDKfor VS2010开发包(可选安装Visual Studio Add-in 1.1.11 for Qt4插件),通过CMake重新生成VS2010解决方案。

解决方法2:打开qgis项目属性 -> 配置属性 -> 链接器 -> 输入 -> 附加依赖项,将Qt 4 Debug版依赖库修改为Release版依赖库。

解决方法3:安装VS2008开发环境,仅用于提供调试版运行库,还是使用VS2010开发。

解决方法4:不再使用VS2010开发,而是采用VS2008开发。

说明:对于VS2008和VS2010混合编程,存在的隐患比较多,不推荐。

问题23:将Qgis设为启动项目,debug调试时直接退出

分析原因:调试跟踪到\src\app\gps\qgsgpsinformationwidget.cpp中语句时直接退出:

mpPlot = new QwtPlot( mpHistogramWidget );

QwtPlot是Qwt5中的类,Qwt5需要调用Qt4-VS2008,由于Qt4-VS2008版与Qt4-VS2010版之间存在兼容性问题,引起异常中断直接退出。

解决方法:通过VS2010重新生成Qwt5,依赖于Qt4-VS2010版。

问题24:QGIS调试时,无法定位程序输入点于动态链接库QtGui4.dll上

分析原因:QGIS加载Python模块console和processing时,需要调用PyQt4,PyQt4依赖于Qt4-VS2008,在VS2010开发环境中调用Qt4-VS2008动态库时引起异常中断错误。

解决方法:采用VS2010重新生成PyQt4,依赖于Qt-VS2010。

编译警告:C4702 无法访问的代码

使用Notepad++ 6.5 打开引起警告的文件,通过格式菜单,将UTF-8无BOM格式编码转为UTF-8格式编码,重新编译。

注意:安装路径最好不要有空格或中文。

说明1:Flex是语法扫描器,用于解析文本生成代码;Bison是语法分析器,用于把上下文无关文法描述转换为可做语法分析的C或C++程序。Flex扫描器经常使用Bison定义的语法,Flex生成代码时使用Bison生成的头文件。

说明2:CMake 2.8中包含FindFLEX.cmake模块和FindBISON.cmake模块(位于C:\GNU\CMake2.8\share\cmake-2.8\Modules),用于查找Flex可执行程序 (flex.exe或win_flex.exe)和Bison可执行程序(bison.exe或win_bison.exe),但是QGIS未使用这两个模块,而是自定义Flex.cmake 模块和Bison.cmake模块(位于\QGIS-master\cmake)来查找flex.exe和bison.exe。

说明3:MS2010中MFC静态编译设置:项目属性 -> 配置属性 –> 常规–> MFC的使用 设置为在静态库中使用MFC;运行库编译设置:项目属性 -> 配置属性 -> C/C++-> 代码生成 -> 运行库设置为多线程(/MT)或多线程调试(/MTd)。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值