zoukankan      html  css  js  c++  java
  • Linux下使用GDAL进行开发(automake使用)

    首先写三个源代码文件,分别是GDALTest.cpp、Fun.cpp和Fun.h,将这三个存放在一个叫GDALTest的文件夹中,然后打开终端,切换到该目录,如下图所示(注:这个图是最后截图的,所以文件夹下面有好多文件,开始应该就只有三个)。

     

    三个文件的内容分别如下,这篇文章主要还是想试试使用automake来生成Linux下的编译脚本,所以就写了三个文件,如果想直接用gcc编译的话,直接写一个cpp就可以。本文后面主要内容其实就是如何使用automake的。

    Fun.h

    #ifndef FUN_H
    #define FUN_H
     
    void Fun(const char* pszFile);
     
    #endif // FUN_H

    Fun.cpp

    #include "Fun.h"
    #include "gdal.h"
    #include "cpl_conv.h"
    #include "cpl_string.h"
    void Fun(const char* pszFile)
    {
     GDALAllRegister();
     GDALDatasetH hDataset = GDALOpen(pszFile, GA_ReadOnly);
       GDALDriverH hDriver = GDALGetDatasetDriver( hDataset );
       printf( "Driver: %s/%s
    ",
                GDALGetDriverShortName( hDriver ),
                GDALGetDriverLongName( hDriver ) );
       char** papszFileList = GDALGetFileList( hDataset );
       if( CSLCount(papszFileList) == 0 )
       {
           printf( "Files: none associated
    " );
       }
       else
       {
           printf( "Files: %s
    ", papszFileList[0] );
       }
       CSLDestroy( papszFileList );
       printf( "Size is %d, %d
    ",
                GDALGetRasterXSize( hDataset ),
                GDALGetRasterYSize( hDataset ) );
       double adfGeoTransform[6] = {0};
       if( GDALGetGeoTransform( hDataset, adfGeoTransform ) == CE_None )
       {
           if( adfGeoTransform[2] == 0.0 && adfGeoTransform[4] == 0.0 )
           {
                printf( "Origin =(%.15f,%.15f)
    ",
                        adfGeoTransform[0],adfGeoTransform[3] );
                printf( "Pixel Size =(%.15f,%.15f)
    ",
                        adfGeoTransform[1],adfGeoTransform[5] );
           }
           else
                printf( "GeoTransform=
    "
                        "  %.16g, %.16g, %.16g
    "
                        "  %.16g, %.16g, %.16g
    ",
                        adfGeoTransform[0],
                        adfGeoTransform[1],
                        adfGeoTransform[2],
                        adfGeoTransform[3],
                        adfGeoTransform[4],
                        adfGeoTransform[5] );
       }
       GDALClose(hDataset);
    }

    GDALTest.cpp

    #include <stdio.h>
    #include <Fun.h>
    int main()
    {
     const char* pszFile = "/home/liml/Work/GDALTest/Test.img";
     Fun(pszFile);
    }
    
    上面就是源代码编写完成,下面开始就是使用automake这一系列的工具生成makefile脚本文件,最后的结果就是编译的时候与编译GDAL库一样,使用./configure,make,makeinstall三步曲进行编译和安装。

    输入autoscan,回车生成文件configure.scan

    输入mv configure.scan configure.in,将congfigure.scan文件重命名为configure.in,如下图所示。

    接下来输入vim configure.in 或geidtconfigure.in或emacs  configure.in来打开 configure.in文件进行修改。修改后的内容如下,红色字体为修改或者增加部分,截图见下图。

     

    #                                              -*- Autoconf -*-
    # Process this file with autoconf toproduce a configure script.
     
    AC_PREREQ([2.63])
    AC_INIT(GDALTest,1.0, liml@21stc.com.cn)
    AM_INIT_AUTOMAKE(GDALTest,1.0)
    AC_CONFIG_SRCDIR([Fun.cpp])
    AC_CONFIG_HEADERS([config.h])
     
    # Checks for programs.
    AC_PROG_CXX
    AC_PROG_CC
     
    # Checks for libraries.
     
    # Checks for header files.
     
    # Checks for typedefs, structures, andcompiler characteristics.
     
    # Checks for library functions.
     
    AC_OUTPUT(Makefile)

    输入aclocal,生存aclocal.m4文件

    接下来输入libtoolize -f -c,生成ltmain.sh文件

    输入autoconf,生存configure文件

    新建一个Makefile.am文件,编辑该文件源代码,头文件,库文件等。该文件修改后的内容如下,截图见下图。修改后的文件内容如下,修改完毕后保存。


    AUTOMAKE_OPTIONS=foreign
    INCLUDES= -I/usr/local/include
    bin_PROGRAMS=GDALTest
    GDALTest_SOURCES=GDALTest.cpp Fun.cpp
    GDALTest_LDADD=-lgdal

    保存退出后,输入autoheader,生成config.h.in

    接下来输入automake –add-missing,生成makefile.in

    至此,生成了使用make工具编译所需要的makefile.in文件,那么接下来的编译就和上面的编译GDAL库类似,使用./configure和make即可。详细步骤如下。

     

    最后输入./configure,回车进行配置,如下图。然后输入make即可生成可执行文件。

    接下来在终端输入 ./GDALTest回车提示如下,说gdal的库找不到。

    此时在终端输入下面的命令,然后再输入./GDALTest即可,在终端中会输出图像信息

    export LD_LIBRARY_PATH=/usr/local/lib

    此文完毕,上面就是在Linux系统下编译和使用GDAL库的步骤。

  • 相关阅读:
    @RequestParam 加与不加的区别
    spring boot 实战
    mongo入门
    npm install 错误记录
    AsyncConfigurer 线程池
    guava Preconditions
    mysql分组、合并语句
    maven的学习以及集成开发软件
    Spring MVC+Junit测试出错---@WebAppConfiguration
    mybatis的代码生成器
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313940.html
Copyright © 2011-2022 走看看