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

f9200fe0e9bebd0508d401bd9f3a9e1f.png

三个文件的内容分别如下,这篇文章主要还是想试试使用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\n",

GDALGetDriverShortName( hDriver ),

GDALGetDriverLongName( hDriver ) );

char** papszFileList = GDALGetFileList( hDataset );

if( CSLCount(papszFileList) == 0 )

{

printf( "Files: none associated\n" );

}

else

{

printf( "Files: %s\n", papszFileList[0] );

}

CSLDestroy( papszFileList );

printf( "Size is %d, %d\n",

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)\n",

adfGeoTransform[0],adfGeoTransform[3] );

printf( "Pixel Size =(%.15f,%.15f)\n",

adfGeoTransform[1],adfGeoTransform[5] );

}

else

printf( "GeoTransform=\n"

" %.16g, %.16g, %.16g\n"

" %.16g, %.16g, %.16g\n",

adfGeoTransform[0],

adfGeoTransform[1],

adfGeoTransform[2],

adfGeoTransform[3],

adfGeoTransform[4],

adfGeoTransform[5] );

}

GDALClose(hDataset);

}

GDALTest.cpp

#include

#include

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,如下图所示。

06a566cd1477bdf1933858cb2fdb28da.png

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

fe41c86e28587390674d95a1d11711e2.png

# -*- 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文件,编辑该文件源代码,头文件,库文件等。该文件修改后的内容如下,截图见下图。修改后的文件内容如下,修改完毕后保存。

1171634fb175ec28e70f0e35369014c6.png

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即可。详细步骤如下。

5625887db25f01c64374612ce964aa0a.png

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

191541307c566511c1d34da571e96fc8.png

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

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

export LD_LIBRARY_PATH=/usr/local/lib

168b83eeba52e5c456a074a0b10b0f31.png

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐