= Building GDAL/OGR Java Bindings on Linux/Unix/MinGW = Tested with GDAL 1.5.2, 1.7.0 and 1.9.2. == Configure and Build GDAL == You need swig in the path. I found I had to configure GDAL --without-libtool to get the java bindings to build. Note : with GDAL 1.7.0, this restriction is no longer necessary. libtool building should work just fine. == Update java.opt == Replace/Create gdal/swig/java/java.opt with an appropriate local version. Make sure the windows backslashes are turned to forward slashes, and point to your local Java SDK. ant is assumed to be in the path. {{{ JAVA_HOME = /home/warmerda/pkg/jdk1.6.0_10 JAVADOC=$(JAVA_HOME)/bin/javadoc JAVAC=$(JAVA_HOME)/bin/javac JAVA=$(JAVA_HOME)/bin/java JAR=$(JAVA_HOME)/bin/jar JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux }}} === OS X Leopard === See this ticket http://trac.osgeo.org/gdal/ticket/2401 for a patch and java.opt for building the java bindings on Leopard === Win32 MinGW === Tested with GDAL 1.7.0. Building the Java bindings under MinGW is possible but requires a bit of patching : * Update the JAVA_HOME variable in gdal/swig/java/java.opt and change the JAVA_INCLUDE variable to the following value : {{{ JAVA_INCLUDE=-I$(JAVA_HOME)/include -I. }}} * in swig/java/GNUmakefile, we ensure that the name of the DLLs are not prefixed by lib, by changing the 'JAVA_MODULES= libgdaljni.$(SO_EXT)...' and '$(JAVA_MODULES): %jni.$(SO_EXT)...' lines to be {{{ JAVA_MODULES = gdaljni.$(SO_EXT) ogrjni.$(SO_EXT) gdalconstjni.$(SO_EXT) osrjni.$(SO_EXT) }}} and {{{ $(JAVA_MODULES): %jni.$(SO_EXT): %_wrap.$(OBJ_EXT) }}} * Create a jni_md.h file in gdal/swig/java directory with the following content that ensures thanks to the empty JNICALL that the symbols in the *jni.dll have the proper decorations {{{ #ifndef _GDAL_JNI_MD_H_ #define _GDAL_JNI_MD_H_ #define JNIEXPORT __declspec(dllexport) #define JNIIMPORT __declspec(dllimport) #define JNICALL typedef long jint; typedef __int64 jlong; typedef signed char jbyte; #endif }}} Then run make from gdal/swig/java. and the GDAL DLL is in the path, "java -cp "gdal.jar;build/apps" gdalinfo" should work. == Run the java build == Do a "make" in gdal/swig/java. You should see a bunch of stuff, possible ending with this: {{{ cp ./.libs/*.so ./ cp: cannot stat `./.libs/*.so': No such file or directory make: [build] Error 1 (ignored) ant Buildfile: build.xml compile: [javac] Compiling 33 source files to /wrk/home/warmerda/wrk/gdal-1.5.2/swig/java/build/classes [echo] compilation complete archive: [jar] Building jar: /wrk/home/warmerda/wrk/gdal-1.5.2/swig/java/gdal.jar BUILD SUCCESSFUL Total time: 2 seconds }}} Don't worry about the ./.libs/*.so error. That appears to be something that would apply with libtool builds. == Running something == While still in gdal/swig/java try: {{{ javac apps/gdalinfo.java setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:`pwd`:path_to_directory_where_libgdal_so java -classpath `pwd`/gdal.jar:`pwd`:`pwd`/apps gdalinfo }}} Starting with GDAL 1.7.0, the utilities are automatically built in the swig/java/build/apps directory. So after building, you can just do {{{ setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:`pwd`:path_to_directory_where_libgdal_so java -classpath `pwd`/gdal.jar:`pwd`:`pwd`/build/apps gdalinfo }}} With luck you will see the gdalinfo usage message. To deploy you need gdal.jar in your class path, the 4 .so files (libgdalconstjni.so, libgdaljni.so, libogrjni.so and libosrjni.so) and libgdal.so in your shared library path.