VS2017编译GDAL常见问题

VS2017编译配置GDAL及常见问题

  • 1、下载解压GDAL
  • 2、编译安装GDAL
    • 1、修改源代码
    • 2、编译
  • 3、GDAL问题
    • 1、'nmake' 不是内部或外部命令,也不是可运行的程序
    • 2、'xcopy' 不是内部或外部命令,也不是可运行的程序
    • 3、无法打开包括文件:“stdio.h”: No such file or directory
    • 4、cannot open output file "odbc32.lib"
    • 5、INK : error LNK2001: 无法解析的外部符号 OGRFeatureStylePuller
    • 6、模块计算机类型“X64”与目标计算机类型“X86”冲突
  • 4、vs2017适配:
  • 5、参考文献

1、下载解压GDAL

官方下载地址为https://trac.osgeo.org/gdal/wiki/DownloadSource,我下载的版本是gdal-2.3.2。需要新建一个安装目录,我的安装地址在D:\GDAL\gdal上。解压地址是D:\GDAL\gdal-2.3.2。

2、编译安装GDAL

1、修改源代码

找到解压地址D:\GDAL\gdal-2.3.2中的文件nmake.opt,用notepad++打开,更改如下几行,并保存:

  • 第41行的代码修改为:MSVC_VER=1910
    VS2017编译GDAL常见问题_第1张图片
  • 第57行的代码修改为:GDAL_HOME = “D:\GDAL\gdal”
    在这里插入图片描述
  • 修改第184行的代码:原来为# WIN64=YES修改为WIN64=YES
    VS2017编译GDAL常见问题_第2张图片

2、编译

以管理员身份运行x64 Native Tools Command Prompt for VS 2017(VS2017的X64的本机工具命令提示
位置:键盘Win(或者桌面"开始"按钮)——所有程序——Visual Studio 2017——Visual Studio Tools——VC——x64 Native Tools Command Prompt for VS 2017
VS2017编译GDAL常见问题_第3张图片
在命令行输入(参考链接)(https://www.jianshu.com/p/bfbf2bec954c):
cd D:\GDAL\gdal-2.3.2
nmake /f makefile.vc MSVC_VER=1910 WIN64=yes
nmake /f makefile.vc install MSVC_VER=1910 WIN64=yes
nmake /f makefile.vc devinstall MSVC_VER=1910 WIN64=yes
关于为什么要写MSVC_VER=1910 WIN64=yes,MSVC_VER=1910表示VS2017 ,WIN64=yes表示64位。

3、GDAL问题

1、‘nmake’ 不是内部或外部命令,也不是可运行的程序

VS2017编译GDAL常见问题_第4张图片
这是因为你的环境变量没有配置,需要添加path include lib。
计算机——右键属性——高级系统设置——环境变量。如下图
VS2017编译GDAL常见问题_第5张图片
我的vs2017安装目录在D盘下,并按照这篇文章手动配置环境变量:(https://blog.csdn.net/kaige_zhao/article/details/80315697)

  • 在gcc的用户变量新建path,添加:
  • D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\Hostx86\x86;
  • 在gcc的用户变量新建Include,添加:
  • D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\include; C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt;
  • 在gcc的用户变量新建lib,添加:
  • D:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\lib\x86; C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10586.0\ucrt\x86; C:\Program Files (x86)\Windows Kits\8.1\bin\x86
    如果没用,尝试自动配置环境变量:
  • 找到计算机中批处理文件vcvarsall.bat的位置,运行该文件:
  • 该文件的地址:D:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
  • 在命令行输入:
  • cd D:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
  • vcvarsall.bat amd64

解释:如果要在命令行生成 32位代码,就执行vcvarsall x86
如果要在32位系统下生成64位代码,就执行vcvarsall x86_amd64
如果要在64位系统下生成32位代码,就执行vcvarsall x86或vcvarsall amd64_x86

通过在纯“命令提示符”窗口中运行 vcvarsall.bat,可设置环境变量以配置适用于 32 位或 64 位本机编译的命令行,或适用于面向 x86、x64 或 ARM 处理器的交叉编译的命令行。 如果未提供任何参数,vcvarsall.bat 将配置环境变量以供使用面向 x86 的 32 位本机编译器。 但是,你可以用该编译器来配置所有的编译器。 如果指定在生成计算机体系结构上未安装或不可用的编译器配置,将会显示一条消息。 下表显示了支持的参数。
VS2017编译GDAL常见问题_第6张图片


或者在命令行运行这个文件,2017以后才有的:VsDevCmd.bat

  • 该文件的地址:D:\Microsoft Visual Studio\2017\Community\Common7\Tools
  • 下图是网址截图:https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/compiler-options/how-to-set-environment-variables-for-the-visual-studio-command-lineVS2017编译GDAL常见问题_第7张图片

2、‘xcopy’ 不是内部或外部命令,也不是可运行的程序

VS2017编译GDAL常见问题_第8张图片
找到计算机中xcopy.exe的位置,双击环境变量path参数为其设置(不一定要删除原有的,可以添加多个)增加变量值“c:\windows\system32”,分号隔开。
还比如’rc’ 不是内部或外部命令,也不是可运行的程序:
RC.exe:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin
也是将上面地址添加到path中。

3、无法打开包括文件:“stdio.h”: No such file or directory

这类问题还有很多,比如:

  • 无法打开包括文件:“stdio.h”: No such file or directory
  • 无法打开包括文件:“window.h”: No such file or directory
  • 无法打开包括文件:“winapifamily.h”: No such file or directory
    原因:这些头文件所在的文件夹索引地址没有加到环境变量的Include中。
    解决方法:添加地址到Include中。
    地址:
  • stdio.h C:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\ucrt;
  • window.hC:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\um;
  • winapifamily.hC:\Program Files (x86)\Windows Kits\10\Include\10.0.10586.0\shared

4、cannot open output file “odbc32.lib”

解决方法:对于lib文件的,添加地址到环境变量Lib中。
地址:

  • odbc32.libC:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64

5、INK : error LNK2001: 无法解析的外部符号 OGRFeatureStylePuller

VS2017编译GDAL常见问题_第9张图片
这个问题困扰了我一天,我试过的几个命令提示符,包括:
x86 Native Tools Command Prompt for VS 2017(无法解析的外部符号)
Developer Command Prompt for VS 2017(无法解析的外部符号)
VS 2015开发人员命令提示(无法解析的外部符号)
x86 Native Tools Command Prompt for VS 2015(无法解析的外部符号)
x64 Native Tools Command Prompt for VS 2015(模块计算机类型“X64”与目标计算机类型“X86”冲突)
x64 Native Tools Command Prompt for VS 2017(模块计算机类型“X64”与目标计算机类型“X86”冲突)
后来我想了要避免模块计算机类型“X64”与目标计算机类型“X86”冲突,就要安装GDAL WIN32类型的,所以在nmake.bat中的 #WIN64不改为WIN64,环境变量path include中路径有x64的改为 x86, vs2017 属性为x86(具体更改步骤见节6)
在 x86 Native Tools Command Prompt for VS 2017中写下命令:
cd D:\GDAL\gdal-2.3.2
nmake /f makefile.vc MSVC_VER=1910
nmake /f makefile.vc install MSVC_VER=1910
nmake /f makefile.vc devinstall MSVC_VER=1910
就成功了

6、模块计算机类型“X64”与目标计算机类型“X86”冲突

因为操作系统是64位的,想安装GDAL的WIN64版本,而vs2017上c++文件的属性中的目标计算机是x86的,表示的是用x64系统写x86代码。所以运行就会出现模块计算机类型“X64”与目标计算机类型“X86”冲突的问题。于是配置以下(目的想将目标计算机类型“X86”改为“X64",这样模块计算机类型与目标计算机类型均为“X64”):

  • nmake.bat中的 #WIN64改为WIN64
  • 环境变量path include中路径有x86的改为 x64
  • 打开vs2017,创建新的c++文件,在文件名右键——属性——链接器——高级——目标计算机x86改为x64;链接器——命令行——添加"/machine:X64 /debug";生成事件——配置管理器——两处“平台”x86改为x64
  • 在命令行 x64 Native Tools Command Prompt for VS 2017写入下命令:
  • cd D:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
  • vcvarsall.bat amd64
  • cd D:\GDAL\gdal-2.3.2
  • nmake /f makefile.vc MSVC_VER=1910 WIN64=yes
    发现还是出现模块计算机类型“X64”与目标计算机类型“X86”冲突,即使在 x64 Native Tools Command Prompt for VS 2015中也会出现,这个问题就没解决。
    后来我想了要避免模块计算机类型“X64”与目标计算机类型“X86”冲突,就要安装GDAL WIN32类型的,使模块计算机类型与目标计算机类型均为“X86”。所以在nmake.bat中的 #WIN64不改动,环境变量path include中路径有x64的改为 x86, vs2017 属性的目标计算机改为x86 ,两处“平台”由x64改回为x86
    在 x86 Native Tools Command Prompt for VS 2017中写下命令:
  • cd D:\GDAL\gdal-2.3.2
  • nmake /f makefile.vc MSVC_VER=1910
  • nmake /f makefile.vc install MSVC_VER=1910
  • nmake /f makefile.vc devinstall MSVC_VER=1910
    就成功了,命令中去掉了WIN64=yes,且注意不要在命令行开始写这两个命令:
  • cd D:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build
  • vcvarsall.bat x86(或者vcvarsall.bat amd64_x86)
    不去配置环境变量
    同时,在每次更改配置完成后,都会重启电脑再运行命令行的命令。多次重启终于折腾成功了。

4、vs2017适配:

安装完成后,按照这两篇博文适配;
https://blog.csdn.net/qq_32153213/article/details/81363588 VS2017编译配置GDAL——超详细,适合初学者!!!
https://blog.csdn.net/Dragonzxc/article/details/80356883 gdal库编译并适配至vs2017
(1)这两篇博文在添加包含目录、库目录的位置不一样,一个在VC++目录,一个在C/C++及链接器里,为避免错误,都适配;
(2)在测试是否配置成功的示例代码中,注意:因为我装的是x86的版本,所以程序需在X86下运行!否则报错,如下:
VS2017编译GDAL常见问题_第10张图片
VS2017编译GDAL常见问题_第11张图片

5、参考文献

[2]: https://www.cnblogs.com/litengyao/p/5150272.html Windows10 + VS2015 环境下对gdal2.0.1进行64bit编译小结
[3]: https://blog.csdn.net/qq_32153213/article/details/81363588 VS2017编译配置GDAL——超详细,适合初学者!!!
[4]: https://www.jianshu.com/p/bfbf2bec954c vs2017安装GDAL
[5]:https://stackoverflow.com/questions/26024919/unresolved-external-symbol-when-compiling-gdal-1-11-0-on-windows 问题解决INK : error LNK2001: 无法解析的外部符号 OGRFeatureStylePuller
[6]:https://blog.csdn.net/u012814856/article/details/78530596 问题解决 NMAKE : fatal error U1077: “rc”: return code“0x1” Stop.
[7]:https://blog.csdn.net/qq50031185/article/details/20501761 问题解决 XCOPY不是内部或外部命令,也不是可运行程序 修复
[8]:https://blog.csdn.net/wgx571859177/article/details/80453649#commentBox 模块计算机类型“X86”与目标计算机类型“X64”冲突的原因分析与解决方案

你可能感兴趣的:(unity3d游戏开发)