zoukankan      html  css  js  c++  java
  • VS2015编译GDAL库出现宏重复定义 snprintf: 宏重定义

    E:OpenSourceGraphgdal-1.10.0gdalport      cpl_config.h   20行

    #define HAVE_VPRINTF 1
    #define HAVE_VSNPRINTF 1
    #define HAVE_SNPRINTF 1
    #if defined(_MSC_VER) && (_MSC_VER < 1500)
    # define vsnprintf _vsnprintf
    #endif
    //#define snprintf _snprintf
    #if defined(_MSC_VER) && (_MSC_VER < 1900)
    # define snprintf _snprintf
    #endif

    ----------------------------------------------------------

    https://www.cnblogs.com/liulunheng/articles/7044292.html

    https://www.cnblogs.com/arxive/p/7854167.html

    1 准备工作

    gdal官网下载源码,准备好编译工具,对于.net开发人员来讲,vs肯定最为熟悉了,但只会C#的童鞋,在安装vs时,可能就只选了C#这一种语言,那就悲剧了,因为压根就没有C++环境,最基础的C++库文件都没有,如何编译呢,所以这里重要的事说三遍,必须是安装了VC++的VS才能进行编译。

    此外,由于后面要在C#程序中调用,C#的接口dll也是少不了要编译的,这个需要借助swig,所以下载一个swig也是必不可少的,需要的版本可以参考gdal官网:http://trac.osgeo.org/gdal/wiki/GdalOgrCsharpCompile

    然后就是修改nmake.opt文件,主要有两处,一处是GDAL_HOME,指定源码所在文件夹,一般建议将文件夹的名称改成gdal,并且放在C盘根目录下,这样可方便后面操作,另外一处是90行,swig.exe的路径,可先将下载后swig程序包解压到C盘,就可以获得swig.exe所在位置的绝对路径。

    除此之外,由于gdal1.8后增加了对路径是否为UTF8编码的判断,直接编译后获得的exe程序不支持中文路径,在利用命令行调用原生exe处理数据时,有一些麻烦,这里可以在编译前通过修改源码来解决这个问题。将下面一句
        CPLSetConfigOption("GDAL_FILENAME_IS_UTF8","NO");
    分别添加到GDALAllRegister()函数【GDAL_HOMEfrmtsgdalallregister.cpp73行左右】和OGRRegisterAll()函数【GDAL_HOMEogrogrsf_frmtsgenericogrregisterall.cpp38行左右】中。

    2 编译gdal.dll

    从windows开始菜单的vs应用程序文件夹中打开visual stuido 命令提示,然后先后输入以下三行命令,即可完成gdal.dll和原生exe的编译,编译结果在bin文件夹中。

    nmake /f makefile.vc
    nmake /f makefile.vc install
    nmake /f makefile.vc devinstall

    第一个命令是编译GDAL 
    第二个、第三个命令是将生成的头文件、静态库、动态库复制到GDAL_HOME目录。 
    如果需要编译debug模式,就将第一个命令改成nmake -f makefile.vc DEBUG=1

  • 相关阅读:
    断开ssh链接在后台继续运行命令
    linux 隐藏显示终端光标
    shell脚本中echo显示内容带颜色
    Linux/Unix下pid文件作用浅析
    使用autotools自动生成Makefile并在此之上使用dh-make生成可发布的deb程序包(详解)
    Linux的tmpfs文件系统
    kernel编译
    Qt之读取配置文件
    android之TCP客户端框架
    android之模拟器更新底层
  • 原文地址:https://www.cnblogs.com/herd/p/11398089.html
Copyright © 2011-2022 走看看