我遇到了根据指南编译gdal 1.11.0的问题:http://trac.osgeo.org/gdal/wiki/BuildingOnWindows
我可以运行nmake /f makefile.vc MSVC_VER=1800 WIN64=YES
但是在安装时它会失败,并带有以下错误:
Creating library gdal_i.lib and object gdal_i.exp
LINK : error LNK2001: unresolved external symbol _OGRFeatureStylePuller
LINK : error LNK2001: unresolved external symbol _OSRValidate
LINK : error LNK2001: unresolved external symbol _OPTGetProjectionMethods
LINK : error LNK2001: unresolved external symbol _OGR_G_GetPointCount
LINK : error LNK2001: unresolved external symbol _OGRRegisterAll
LINK : error LNK2001: unresolved external symbol _GDALSimpleImageWarp@36
LINK : error LNK2001: unresolved external symbol _GDALReprojectImage@48
LINK : error LNK2001: unresolved external symbol _GDALComputeMedianCutPCT@32
LINK : error LNK2001: unresolved external symbol _GDALDitherRGB2PCT@28
LINK : error LNK2001: unresolved external symbol _OCTNewCoordinateTransformation
@8
gdal111.dll : fatal error LNK1120: 10 unresolved externals
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0
\VC\BIN\amd64\link.EXE"' : return code '0x460'
Stop.
这是我能做什么的事情,或者是从http://trac.osgeo.org/gdal/wiki/DownloadSource
下载的源代码中出现的问题答案 0 :(得分:4)
Poul提供的答案不对。我终于找到了解决这个问题的方法:
在GDAL主文件夹下找到nmake.opt文件,打开它并搜索' SYM_PREFIX'的定义。然后更改' SYM_PREFIX = _'到' SYM_PREFIX =' (删除下划线)。
在GDAL主文件夹下找到makefile.vc文件,打开它并搜索' BASE_INCLUDE'的第一个定义。 (另一个定义就在它下面,不要改错了)。
改变
BASE_INCLUDE = /INCLUDE:_GDALSimpleImageWarp@36 /
/INCLUDE:_GDALReprojectImage@48 /
/INCLUDE:_GDALComputeMedianCutPCT@32 /
/INCLUDE:_GDALDitherRGB2PCT@28 /
/INCLUDE:_OCTNewCoordinateTransformation@8 $(VB6_SAFEARRAYSYM)
至:
BASE_INCLUDE = /INCLUDE:$(SYM_PREFIX)GDALSimpleImageWarp /
/INCLUDE:$(SYM_PREFIX)GDALReprojectImage /
/INCLUDE:$(SYM_PREFIX)GDALComputeMedianCutPCT /
/INCLUDE:$(SYM_PREFIX)GDALDitherRGB2PCT /
/INCLUDE:$(SYM_PREFIX)OCTNewCoordinateTransformation $(VB6_SAFEARRAYSYM)
。
简而言之,替换' _'使用$(SYM_PREFIX),并删除' @ number'。
根据一些网页,这个问题可能是由处理未修饰符号的AMD64 vc ++编译器的更改引起的。
答案 1 :(得分:2)
事实证明,参数无法在命令行上传递,需要在配置文件中进行更改。
答案 2 :(得分:0)
您可以通过取消注释nmake.opt文件的部分来将其他参数传递到构建中。调用位于
的批处理文件后,以下命令对我有用" C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \"
vcvarsall.bat amd64
nmake /f makefile.vc MSVC_VER=1800 WIN64=yes
nmake /f makefile.vc install MSVC_VER=1800 WIN64=yes
nmake /f makefile.vc devinstall MSVC_VER=1800 WIN64=yes
答案 3 :(得分:0)
我有同样的问题,在设置正确的MSVC_VER(我的VS 2012)之后,问题就解决了。
Nmake Command:
nmake /f makefile.vc MSVC_VER=1800 WIN64=yes
MSVC版本:
MSVC++ 9.0 _MSC_VER == 1500 (Visual Studio 2008)
MSVC++ 10.0 _MSC_VER == 1600 (Visual Studio 2010)
MSVC++ 11.0 _MSC_VER == 1700 (Visual Studio 2012)
MSVC++ 12.0 _MSC_VER == 1800 (Visual Studio 2013)
MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015)
MSVC++ 14.1 _MSC_VER == 1910 (Visual Studio 2017)