【完美解决】arcgis engine 10.0 for cross platform C++ 在visual studio上编译的AE程序 的License无法初始化错误。

时间:2024-02-17 15:37:55

 

利用 vs2010 编译运行(debug运行方式)arcgis engine for C++ 10.0 的sample文件 出现这样的错误。

LicenseUtilities::InitializeApp -- Unable to initialize ArcObjects (no appropria
te license available).

 

原来以为 是无法初始化lisence,可能是 C++和 java的lisence不一样呢,可是今天恍然大悟。

vs2010 编译运行 有一些 看不到的东西。

使用 Nmake /f nmakefile.mk 也可以编译出来 exe 可执行文件,而且 没有License错误,看来 是vs2010 搞的鬼。vs2010 配置起来 太tmd 穷酸的 难了。。。。。。。

还是 用命令行 配置最简单,用 vs2010编码 比较合适,不过 调试 debug  还是 vs2010好,但是 它又无法 编译 出来 正常的 arcgis engine的 exe可执行文件来。

nmakefile.mk文件示例为:

!include <$(AGSDEVKITJAVA)\Samples\ArcObjectsCPP\MakefileUtilities\mk.Windows>

PROGRAM = ArcGISEngineCpp.exe
CPPSOURCES = ArcGISEngineCpp.cpp LicenseUtilities.cpp    

CPPOBJECTS = $(CPPSOURCES:.cpp=.obj)
CPPHEADERS =ArcGISEngineCpp.h      LicenseUtilities.h


all:   $(PROGRAM)

$(PROGRAM): $(CPPOBJECTS)
    link.exe /out:$@ $** $(LINKFLAGS)

clean:
    del $(PROGRAM)
    del $(CPPOBJECTS)  
    del *.tlh

你的程序 只需要 更改红色的三行就可以了。其意思 很明显:可执行文件名称(就是link命令所干的事情),cpp和h文件(就是 cl.exe编译器 干的事情)。

nmake.exe文件 如果你无法运行,确保你安装了 vs2010 并且 运行了 

vs2010 的命令行,cmd里显示有:

Setting environment for using Microsoft Visual Studio 2010 x86 tools

才行。

其实 vs2010的命令行里 也是 调用了 其他的bat 来设置 vs2010的环境变量。

自己只设置 path环境变量还不行,运行nmake根本没反应,没输出,直接完毕。有点郁闷的行为。

vs2010 的命令行 执行的文件是:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat

一般 需要编译的目标平台是x86,所以直接运行call "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat" 就可以执行 nmake 和cl link等vs2010 核心命令了。

 ================

最新消息,我已经知道 为什么 vs2010 编译的 arcgis engine 10.0 for C++ 应用程序 Lisence初始化失败呢?原因就是:

在visual studio的项目属性:  c/c++ 命令行  其他选项 添加 下面的一个 宏定义 /DARCGIS_VERSION="10.0" 即可。也可以在 所有 h头文件 添加 #define ARCGIS_VERSION 10.0

我是如何知道的呢??

通过visual studio可以获得 cl编译器 的命令行参数是什么,如图所示(下面已经添加了 arcgis_version):

而使用 nmake生成的可执行文件 初始化 arcgis engine Lisence 没问题,运行的时候会有 cl 和参数如对比图:

下面的是 nmake执行过程中的 一段,看看 cl后门的参数。发现 下面多了一个关键的 -DArcgis_version=10.0(应该 要区分大小写的!),上面没有,那么就添加上去 再用vs2010编译即可。

完美解决此问题,此问题 在 arcgis  engine for c++的文档上 根本就没有显示。ESRI他们 简直 太恶心了。