
I could not find 64-bit binaries of the open-source
libGeotiff library so I decided to download the most recent source code from
http://trac.osgeo.org/geotiff/ so that I could use Microsoft Visual Studio 2010 to compile make my own. Other libraries are also required so I downloaded the latest source code for
libTiff from
http://download.osgeo.org/libtiff/ and
Proj4 from
http://trac.osgeo.org/proj/. I have no problems compiling libTiff and Proj4 as is but I had to modify the libGeotiff's
makefile.vc file to make it compile successfully. Note that successful compilation does not necessarily mean the 64 bit executables will run successfully.
Compile 64 bit version of Proj4
- Extract the Proj4 source code into a folder e.g. C:\Work\src\proj-4.8.0\
- Select Start | All Programs | Microsoft Visual Studio 2010 | Visual Studio Tools | Visual Studio x64 Win64 Command Prompt.
The Win64 Command Prompt appears.
- In the Command Prompt, type in and enter the following:
C:\> cd \Work\src\proj-4.8.0
- Run the nmake build command in the Command Prompt:
C:\> nmake /f makefile.vc
The 64 bit version of Proj4 is created.
Compile 64 bit version of libTiff
- Extract the libTiff source code into a folder e.g. C:\Work\src\tiff-4.0.3\.
- Open up the Win64 Command Prompt if it is not already on the screen.
- In the Command Prompt, type in the following command.
C:\> cd \Work\src\tiff-4.0.3\
- Run the nmake build command in the Command Prompt.
C:\> nmake /f makefile.vc
The 64 bit version of libTiff is created.
Compile 64-bit version of libGeotiff
- Extract the libGeotiff source code into a folder e.g. C:\Work\src\libgeotiff-1.4.0\.
- Use a text editor to open up the header file geo_config.h. Add in the line #define BUILD_AS_DLL 1 as shown in red below.
/* geo_config.h. Generated from geo_config.h.in by configure. */
#ifndef GEO_CONFIG_H
#define GEO_CONFIG_H
#define BUILD_AS_DLL 1
/* Define if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
#define HAVE_LIBPROJ 1
/* #undef HAVE_PROJECTS_H */
#endif /* ndef GEO_CONFIG_H */
- Use a text editor to open up the libGeotiff's makefile.vc file.
- Replace the contents of makefile.vc with the contents below.
Note: the parts that were modified are colored in red.
#
# Typically the only thing that needs to be changed are the paths to the
# TIFF tree. Note that we expect an existing build tree, in part because we
# need private include files from libtiff, but also we need access to getopt.h.
# in the ports directory.
#
# You may want to add optimization options to the CFLAGS macro as well.
#
TIFF = C:\Work\src\tiff-4.0.3
PROJ4 = C:\Work\proj-4.8.0
TIFF_INC = -I$(TIFF)\libtiff
TIFF_LIB = $(TIFF)\libtiff\libtiff.lib
TIFF_LIB_DLL = $(TIFF)\libtiff\libtiff_i.lib
PROJ4_INC = -I$(PROJ4)\src
PROJ_LIB = $(PROJ4)\src\proj.lib
PROJ4_LIB_DLL = $(PROJ4)\src\proj_i.lib
# Installation locations (with install, or devinstall targets)
PREFIX = release
BINDIR = $(PREFIX)\bin
LIBDIR = $(PREFIX)\lib
INCDIR = $(PREFIX)\include
DATADIR = $(PREFIX)\share\epsg_csv
#
CC = cl
INCL = -I. -Ilibxtiff $(TIFF_INC) $(PROJ4_INC)
# Pick the first LIBS definition for a static libtiff.lib or the second
# to link against the libtiff DLL.
#LIBS = geotiff.lib $(TIFF_LIB) $(PROJ4_LIB)
LIBS = geotiff_i.lib $(TIFF_LIB_DLL) $(PROJ4_LIB_DLL)
DLLNAME = geotiff.dll
# Set optimization or debug flags here.
CFLAGS = $(INCL) /MD /Ox /nologo
#CFLAGS = $(INCL) /MD /Zi /nologo
#
OBJS = \
xtiff.obj \
geo_free.obj \
geo_get.obj \
geo_names.obj \
geo_new.obj \
geo_print.obj \
geo_set.obj \
geo_tiffp.obj \
geo_write.obj \
geo_extra.obj \
geo_trans.obj \
geo_normalize.obj \
geotiff_proj4.obj \
geo_simpletags.obj \
cpl_csv.obj \
cpl_serv.obj
all: geo_config.h geotiff.lib $(DLLNAME) listgeo.exe geotifcp.exe
listgeo.exe: bin\listgeo.c geotiff.lib
$(CC) $(CFLAGS) bin\listgeo.c $(LIBS)
geotifcp.exe: bin\geotifcp.c geotiff.lib
$(CC) $(CFLAGS) bin\geotifcp.c bin\getopt.c $(LIBS)
gt_update.exe: bin\gt_update.c geotiff.lib
$(CC) $(CFLAGS) bin\gt_update.c bin\getopt.c geotiff.lib $(LIBS)
geotiff.lib: $(OBJS)
lib /out:geotiff.lib $(OBJS)
#
$(DLLNAME): $(OBJS)
link /dll /out:$(DLLNAME) /implib:geotiff_i.lib $(OBJS) $(TIFF_LIB_DLL) $(PROJ4_LIB_DLL)
if exist $(DLLNAME).manifest mt -manifest $(DLLNAME).manifest -outputresource:$(DLLNAME);2
geo_config.h: geo_config.h.vc
copy geo_config.h.vc geo_config.h
xtiff.obj: libxtiff\xtiff.c
$(CC) -c $(CFLAGS) libxtiff\xtiff.c
geo_free.obj: geo_free.c
$(CC) -c $(CFLAGS) geo_free.c
geo_get.obj: geo_get.c
$(CC) -c $(CFLAGS) geo_get.c
geo_names.obj: geo_names.c
$(CC) -c $(CFLAGS) geo_names.c
geo_new.obj: geo_new.c
$(CC) -c $(CFLAGS) geo_new.c
geo_print.obj: geo_print.c
$(CC) -c $(CFLAGS) geo_print.c
geo_set.obj: geo_set.c
$(CC) -c $(CFLAGS) geo_set.c
geo_tiffp.obj: geo_tiffp.c
$(CC) -c $(CFLAGS) geo_tiffp.c
geo_write.obj: geo_write.c
$(CC) -c $(CFLAGS) geo_write.c
geo_trans.obj: geo_trans.c
$(CC) -c $(CFLAGS) geo_trans.c
geo_extra.obj: geo_extra.c
$(CC) -c $(CFLAGS) geo_extra.c
geo_normalize.obj: geo_normalize.c
$(CC) -c $(CFLAGS) geo_normalize.c
geotiff_proj4.obj: geotiff_proj4.c
$(CC) -c $(CFLAGS) geotiff_proj4.c
cpl_csv.obj: cpl_csv.c
$(CC) -c $(CFLAGS) cpl_csv.c
cpl_serv.obj: cpl_serv.c
$(CC) -c $(CFLAGS) cpl_serv.c
clean:
-del *.obj
-del *.exe
-del *.lib
-del *.dll
-del *.manifest
install: all
-mkdir $(PREFIX)
-mkdir $(BINDIR)
-mkdir $(DATADIR)
copy *.dll $(BINDIR)
copy *.exe $(BINDIR)
-copy csv\*.csv $(DATADIR)
devinstall: install
-mkdir $(INCDIR)
-mkdir $(LIBDIR)
copy *.lib $(LIBDIR)
copy *.h $(INCDIR)
copy libxtiff\*.h $(INCDIR)
copy *.inc $(INCDIR)
- Save and close the text editor.
- Open up the Win64 Command Prompt if it is not on the screen.
- In the Command Prompt, type in the following.
C:\> cd \Work\src\libgeotiff-1.4.0\
- Run the nmake build command in the Command Prompt.
C:\> nmake /f makefile.vc
The 64 bit libgeotiff files are created.