在Windows上编译GDAL 1.11.0时未解析的外部符号

时间:2014-09-24 19:27:53

标签: c++ gdal

我遇到了根据指南编译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

下载的源代码中出现的问题

4 个答案:

答案 0 :(得分:4)

Poul提供的答案不对。我终于找到了解决这个问题的方法:

  1. 在GDAL主文件夹下找到nmake.opt文件,打开它并搜索' SYM_PREFIX'的定义。然后更改' SYM_PREFIX = _'到' SYM_PREFIX =' (删除下划线)。

  2. 在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'。

  3. 根据一些网页,这个问题可能是由处理未修饰符号的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)