[gdal-dev] GDAL 1.7.2 Windows compilation JAVA JNI doesn't work

Zdeněk Vráblík zdenek at vrablik.org
Wed Aug 4 12:07:47 EDT 2010


Hi all,

I have problem to use java jni generated dll files. I have available
precompiled dll files with internal formats + MrSID and ECW. These dll
works fine including JNI.
Now I have compiled gdal myself, because I need add more formats (GPX,
GML, KML ) and later possibly SDE.

I can't load the  gdaljni.dll into java.
I am getting this error:
Native library load failed.
java.lang.UnsatisfiedLinkError:
C:\ZdenekTC\lib\native\GDAL_DATA\gdaljni.dll: The operating system
cannot run %1

Building env: Windows XP, Microsoft Windows SDK 7.0; Visual Studio
2005, gdal 1.7.2; crosscompiler
Running env: Windows 2003 SP2, sun JDK 6, Tomcat 6, gdal 1.7.2

I am sure I have PE+ dll files. (tested with msys file command)

I tried compile HelloWorld from Java JNI tutorial and I have got same issue.
rem original cl -IC:\Java1.6\include -IC:\Java1.6\include\win32 /O1
/Op /Zi /MD /D _STATIC_CPPLIB /Wp64 /W3 /DNDEBUG /DWIN32 /DIAL
/D_LITTLE_ENDIAN /D_AMD64_ /Damd64 /DWIN32_LEAN_AND_MEAN /c *.c
cl -IC:\Java1.6\include -IC:\Java1.6\include\win32 /O1 /Op /Zi /MT /D
_STATIC_CPPLIB /Wp64 /W3 /DNDEBUG /DWIN32 /DIAL /D_LITTLE_ENDIAN
/D_AMD64_ /Damd64 /DWIN32_LEAN_AND_MEAN /DJNI_IMPLEMENTATION /c *.c
rem original link /dll /opt:REF /incremental:no /debug /out:HelloWorld.dll *.obj
link /verbose /dll /opt:REF /incremental:no /out:HelloWorld.dll *.obj

The HelloWorld dll works fine without the MD flag.
Removing MD parameter doesn't work in gdal JNI dll files.

Do I have to add there any parameter to get gdal jni binding compilled
correctly?

I think the MD parameter is necessary if there is another part of
application loading same dll files?


Here is standard output from compiling (the swig warning messages are
not included):

	del .\setup.ini
	echo "C:\GDAL\gdal1.7.1Win32Win64\win64\gdal172Dist" > .\setup.ini
	findstr /c:"define GDAL_RELEASE_NAME " ..\gcore\gdal_version.h  >> .\setup.ini
	cd java
	if not exist org\gdal\gdal mkdir org\gdal\gdal
	cd gdal
	swig.exe -java -c++ -package org.gdal.gdal -outdir ../org/gdal/gdal
-I../../include/java -o gdal_wrap.cpp ../../../include/gdal.i
	cd ..
	cd org\gdal
	if not exist ogr mkdir ogr
	cd ../../
	cd ogr
	swig.exe -java -c++ -package org.gdal.ogr -outdir ../org/gdal/ogr
-I../../include/java -o ogr_wrap.cpp ../../../include/ogr.i
	cd ..
	cd org\gdal
	if not exist osr mkdir osr
	cd ../../
	cd osr
	swig.exe -java -c++ -package org.gdal.osr -outdir ../org/gdal/osr
-I../../include/java -o osr_wrap.cpp ../../../include/osr.i
	cd ..
	cd org\gdal
	if not exist gdalconst mkdir gdalconst
	cd ../../
	cd const
	swig.exe -java -c++ -package org.gdal.gdalconst -outdir
../org/gdal/gdalconst -I../../include/java -o gdalconst_wrap.cpp
../../../include/gdalconst.i
	cd ..
	nmake /nologo /f makefile.vc
	cd ogr
	nmake /nologo /f makefile.vc
	cl /nologo /MT /EHsc /GR /Ox /W3 /DNDEBUG -I..\..\..\port
-I..\..\..\ogr -I..\..\..\gcore  -I..\..\..\alg
-I..\..\..\ogr\ogrsf_frmts  -DOGR_ENABLED  -IC:\Java1.5\include
-IC:\Java1.5\include\win32 /c ogr_wrap.cpp
ogr_wrap.cpp
	xcopy /D  /Y *.obj ..
C:ogr_wrap.obj
1 File(s) copied
	cd ..
	link ogr_wrap.obj ..\..\gdal_i.lib /out:ogrjni.dll /DLL
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

   Creating library ogrjni.lib and object ogrjni.exp
	if exist ogrjni.dll.manifest mt -manifest ogrjni.dll.manifest
-outputresource:ogrjni.dll;2
Microsoft (R) Manifest Tool version 5.2.3790.2075

Copyright (c) Microsoft Corporation 2005.

All rights reserved.

	cd gdal
	nmake /nologo /f makefile.vc
	cl /nologo /MT /EHsc /GR /Ox /W3 /DNDEBUG -I..\..\..\port
-I..\..\..\ogr -I..\..\..\gcore  -I..\..\..\alg
-I..\..\..\ogr\ogrsf_frmts  -DOGR_ENABLED  -IC:\Java1.5\include
-IC:\Java1.5\include\win32 /c gdal_wrap.cpp
gdal_wrap.cpp
gdal_wrap.cpp(989) : warning C4996: 'stricmp': The POSIX name for this
item is deprecated. Instead, use the ISO C++ conformant name:
_stricmp. See online help for details.
        C:\Program Files\Microsoft Visual Studio
8\VC\INCLUDE\string.h(215) : see declaration of 'stricmp'
gdal_wrap.cpp(991) : warning C4996: 'stricmp': The POSIX name for this
item is deprecated. Instead, use the ISO C++ conformant name:
_stricmp. See online help for details.
        C:\Program Files\Microsoft Visual Studio
8\VC\INCLUDE\string.h(215) : see declaration of 'stricmp'
gdal_wrap.cpp(993) : warning C4996: 'stricmp': The POSIX name for this
item is deprecated. Instead, use the ISO C++ conformant name:
_stricmp. See online help for details.
        C:\Program Files\Microsoft Visual Studio
8\VC\INCLUDE\string.h(215) : see declaration of 'stricmp'
gdal_wrap.cpp(1019) : warning C4267: 'argument' : conversion from
'size_t' to 'int', possible loss of data
	xcopy /D  /Y *.obj ..
C:gdal_wrap.obj
1 File(s) copied
	cd ..
	link gdal_wrap.obj ..\..\gdal_i.lib /out:gdaljni.dll /DLL
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

   Creating library gdaljni.lib and object gdaljni.exp
	if exist gdaljni.dll.manifest mt -manifest gdaljni.dll.manifest
-outputresource:gdaljni.dll;2
Microsoft (R) Manifest Tool version 5.2.3790.2075

Copyright (c) Microsoft Corporation 2005.

All rights reserved.

	cd const
	nmake /nologo /f makefile.vc
	cl /nologo /MT /EHsc /GR /Ox /W3 /DNDEBUG -I..\..\..\port
-I..\..\..\ogr -I..\..\..\gcore  -I..\..\..\alg
-I..\..\..\ogr\ogrsf_frmts  -DOGR_ENABLED  -IC:\Java1.5\include
-IC:\Java1.5\include\win32 /c gdalconst_wrap.cpp
gdalconst_wrap.cpp
	xcopy /D  /Y *.obj ..
C:gdalconst_wrap.obj
1 File(s) copied
	cd ..
	link gdalconst_wrap.obj ..\..\gdal_i.lib /out:gdalconstjni.dll /DLL
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

   Creating library gdalconstjni.lib and object gdalconstjni.exp
	if exist gdalconstjni.dll.manifest mt -manifest
gdalconstjni.dll.manifest -outputresource:gdalconstjni.dll;2
Microsoft (R) Manifest Tool version 5.2.3790.2075

Copyright (c) Microsoft Corporation 2005.

All rights reserved.

	cd osr
	nmake /nologo /f makefile.vc
	cl /nologo /MT /EHsc /GR /Ox /W3 /DNDEBUG -I..\..\..\port
-I..\..\..\ogr -I..\..\..\gcore  -I..\..\..\alg
-I..\..\..\ogr\ogrsf_frmts  -DOGR_ENABLED  -IC:\Java1.5\include
-IC:\Java1.5\include\win32 /c osr_wrap.cpp
osr_wrap.cpp
	xcopy /D  /Y *.obj ..
C:osr_wrap.obj
1 File(s) copied
	cd ..
	link osr_wrap.obj ..\..\gdal_i.lib /out:osrjni.dll /DLL
Microsoft (R) Incremental Linker Version 8.00.50727.762
Copyright (C) Microsoft Corporation.  All rights reserved.

   Creating library osrjni.lib and object osrjni.exp
	if exist osrjni.dll.manifest mt -manifest osrjni.dll.manifest
-outputresource:osrjni.dll;2
Microsoft (R) Manifest Tool version 5.2.3790.2075

Copyright (c) Microsoft Corporation 2005.

All rights reserved.

	set JAVA_HOME="C:\Java1.5"
	C:\ant\bin\ant
Buildfile: build.xml

compile:
    [javac] Compiling 34 source files to
C:\GDAL\gdal1.7.1Win32Win64\win64\gdal-1.7.2\swig\java\build\classes
     [echo] compilation complete

archive:
      [jar] Building jar:
C:\GDAL\gdal1.7.1Win32Win64\win64\gdal-1.7.2\swig\java\gdal.jar

compile_tests:
     [echo] compilation of tests complete

all:

BUILD SUCCESSFUL
Total time: 1 second


nmake.opt diff is
--- nmake.opt.original	2010-04-23 16:22:12 +0100
+++ nmake.opt	2010-08-04 16:21:14 +0100
@@ -39,7 +39,7 @@
 # But the paths *should* be absolute (relative paths mess up in submakefiles).

 !IFNDEF GDAL_HOME
-GDAL_HOME = "C:\warmerda\bld"
+GDAL_HOME = "C:\GDAL\gdal1.7.1Win32Win64\win64\gdal172Dist"
 !ENDIF
 BINDIR = $(GDAL_HOME)\bin
 PLUGINDIR = $(BINDIR)\gdalplugins
@@ -61,10 +61,10 @@

 # SWIG Java settings
 !IFNDEF JAVA_HOME
-JAVA_HOME = c:\j2sdk1.4.2_12
+JAVA_HOME = C:\Java1.6
 !ENDIF
 !IFNDEF ANT_HOME
-ANT_HOME=c:\programmi\apache-ant-1.7.0
+ANT_HOME=C:\ant
 !ENDIF
 JAVADOC=$(JAVA_HOME)\bin\javadoc
 JAVAC=$(JAVA_HOME)\bin\javac
@@ -76,15 +76,15 @@
 !IFNDEF OPTFLAGS
 !IF $(MSVC_VER) >= 1400
 !IFNDEF DEBUG
-OPTFLAGS= /nologo /MD /EHsc /Ox /W3 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /DNDEBUG
+OPTFLAGS= /nologo /MT /EHsc /Ox /W3 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /DNDEBUG
 !ELSE
-OPTFLAGS= /nologo /MD /EHsc /Zi /W4 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /Fd$(GDAL_ROOT)\gdal$(VERSION).pdb
+OPTFLAGS= /nologo /MT /EHsc /Zi /W4 /D_CRT_SECURE_NO_DEPRECATE
/D_CRT_NONSTDC_NO_DEPRECATE /Fd$(GDAL_ROOT)\gdal$(VERSION).pdb
 !ENDIF
 !ELSE
 !IFNDEF DEBUG
-OPTFLAGS=	/nologo /MD /EHsc /GR /Ox /W3 /DNDEBUG
+OPTFLAGS=	/nologo /MT /EHsc /GR /Ox /W3 /DNDEBUG
 !ELSE
-OPTFLAGS=	/nologo /MD /EHsc /GR /Zi /W4 /Fd$(GDAL_ROOT)\gdal$(VERSION).pdb
+OPTFLAGS=	/nologo /MT /EHsc /GR /Zi /W4 /Fd$(GDAL_ROOT)\gdal$(VERSION).pdb
 !ENDIF
 !ENDIF  #MSVC_VER
 !ENDIF  # OPTFLAGS
@@ -97,7 +97,7 @@
 # Uncomment the following if you are building for 64-bit windows
 # (x64). You'll need to have PATH, INCLUDE and LIB set up for 64-bit
 # compiles.
-#WIN64=YES
+WIN64=YES

 # If you don't want some entry points to have STDCALL conventions,
 # comment out the following and add -DCPL_DISABLE_STDCALL in OPTFLAGS.
@@ -160,9 +160,10 @@
 #GEOTIFF_LIB =   C:/warmerda/libgeotiff/geotiff_i.lib

 # Uncomment the following and update to enable ECW support.
-#ECW_PLUGIN = NO
-#ECWDIR  = 	C:\warmerda\libecwj2-3.3
-#ECWLIB  = 	$(ECWDIR)\Source\NCSBuildQmake\Debug\libecwj2.lib
+ECW_PLUGIN = YES
+ECWDIR=C:\GDAL\gdal1.7.1Win32Win64\win64\libecwj2-3.3
+#ECWLIB=$(ECWDIR)\lib\win64\*.lib
+ECWLIB=$(ECWDIR)\lib\win64\NCSEcw.lib
$(ECWDIR)\lib\win64\NCSEcwCu.lib $(ECWDIR)\lib\win64\NCSUtil.lib
$(ECWDIR)\lib\win64\NCScnet.lib $(ECWDIR)\lib\win64\NCSEcwC.lib
$(ECWDIR)\lib\win64\NCSEcwS.lib $(ECWDIR)\lib\win64\NCSUtilS.lib
$(ECWDIR)\lib\win64\NCScnetS.lib

 # DWG/DXF support via DWGdirect from Open Design Alliance

@@ -177,9 +178,9 @@
 #		$(OGDIDIR)\lib\$(TARGET)\zlib_ogdi$(OGDIVER).lib

 # Uncomment for Expat support (required for KML, GPX and GeoRSS read support).
-#EXPAT_DIR = "C:\Program Files\Expat 2.0.1"
-#EXPAT_INCLUDE = -I$(EXPAT_DIR)/source/lib
-#EXPAT_LIB = $(EXPAT_DIR)/bin/libexpat.lib
+EXPAT_DIR = C:\GDAL\gdal1.7.1Win32Win64\win64\expat-2.0.1\win32\bin\release
+EXPAT_INCLUDE = -IC:\GDAL\gdal1.7.1Win32Win64\win64\expat-2.0.1\lib
+EXPAT_LIB = C:\GDAL\gdal1.7.1Win32Win64\win64\expat-2.0.1\win32\bin\release\libexpatMT.lib

 # Uncomment for Xerces based GML and ILI support.
 #XERCES_DIR =	c:\warmerda\supportlibs\xerces-c_2_6_0
@@ -219,12 +220,12 @@

 # Uncomment the following for MrSID support.
 # You will likely require /MD and /EHsc in OPTFLAGS.
-#MRSID_DIR =	d:\projects\mrsid
-#MRSID_INCLUDE = -I$(MRSID_DIR)\include\base -I$(MRSID_DIR)\include\support \
-#		-I$(MRSID_DIR)\include\metadata \
-#		-I$(MRSID_DIR)\include\mrsid_readers \
-#		-I$(MRSID_DIR)\include\j2k_readers
-#MRSID_LIB =	$(MRSID_DIR)\lib\Release_md\lti_dsdk_dll.lib
advapi32.lib user32.lib
+MRSID_DIR =	C:\GDAL\gdal1.7.1Win32Win64\win64\Geo_DSDK-7.0.0.2167
+MRSID_INCLUDE = -I$(MRSID_DIR)\include\base -I$(MRSID_DIR)\include \
+		-I$(MRSID_DIR)\include\metadata \
+		-I$(MRSID_DIR)\include\mrsid_readers \
+		-I$(MRSID_DIR)\include\j2k_readers
+MRSID_LIB =	$(MRSID_DIR)\lib\Release_md\lti_dsdk_dll.lib advapi32.lib
user32.lib
 # Comment out the following to supress JP2MRSID driver.
 #MRSID_FLAGS =	-DMRSID_J2K
 # Enable these, if you have the MrSID Encoding SDK and want
@@ -234,7 +235,7 @@
 #		-I$(MRSID_DIR)\include\j2k_writers $(MRSID_INCLUDE)
 #MRSID_LIB =	$(MRSID_DIR)\lib\Release_md\lti_esdk_dll.lib $(MRSID_LIB)
 # Enable the following if you prefer to build MrSID support as a plugin.
-#MRSID_PLUGIN = YES
+MRSID_PLUGIN = YES

 # PCIDSK Libraries - default configuration uses internal implementation
 PCIDSK_SETTING=INTERNAL


Do I have to add any new parameters to compile jni dll files? Did I
any wrong step during compilation?

I could send you full description what I have done to compile ecw and
installing the Windows SDK if required.
I have compiled gdal 1.7.1 in linux 64bit and Solaris SPARC 64 bit and
it works fine.

I have tested the compiled dll files in two different runtime environments.

Thank you for your help.

Regards,
Zdenek


More information about the gdal-dev mailing list