X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RFC_ABUSE_POST,SPF_HELO_PASS,TW_NW,T_RP_MATCHES_RCVD,T_TO_NO_BRKTS_FREEMAIL X-Spam-Check-By: sourceware.org X-Trace: 608902282/mk-filter-4.mail.uk.tiscali.com/B2C/$b2c-THROTTLED-DYNAMIC/b2c-CUSTOMER-DYNAMIC-IP/85.210.86.146/None/cp DOT montanari AT tiscali DOT co DOT uk X-SBRS: None X-RemoteIP: 85.210.86.146 X-IP-MAIL-FROM: cp DOT montanari AT tiscali DOT co DOT uk X-SMTP-AUTH: X-Originating-Country: GB/UNITED KINGDOM X-MUA: Mutt/1.5.21 (2010-09-15) X-IP-BHB: Once X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AvsEALqTxU1V0laS/2dsb2JhbACmI3ikb55Cgi2DXwSTf4pE Date: Sat, 7 May 2011 19:49:47 +0100 From: christian Montanari To: cygwin AT cygwin DOT com Subject: UnsatisfiedLinkError:with gcc linked cyg.dll under J AT v@-1.6 Message-ID: <20110507184947.GA9140@thorntonmontanari.co.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.5.21 (2010-09-15) Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com many are not using gnu-java, the orginial sun-java, it is certainly more baroc ! anyway, I am trying to link a DLL with gcc then to load it with Java(TM) system.loadlibray() but got eventually the error... ... [Loaded java.lang.UnsatisfiedLinkError from shared objects file] ... I have attached a benchmark taken from the archives... and run "make test", I wonder what is the missing command in the linker which allows JNI to load all the cygwin objects? Christian Montanari. ---------------HelloWorld.java------- public class HelloWorld { private static String libraryName = "Native"; /** * Failure callback strategy that writes a message to sysout, then calls * System.exit(1). */ public static Runnable EXIT_JVM = new Runnable() { public void run() { System.out.println("Could not load '" + libraryName + "'"); System.out.println("java.library.path = " + System.getProperty("java.library.path")); System.exit(1); } }; public static Runnable THROW_ERROR = new Runnable() { public void run() { throw new UnsatisfiedLinkError("Could not load '" + libraryName + "'"); } }; private static Object callbackLock = new Object(); private static Runnable failureCallback = EXIT_JVM; private static native void sayHello(); public static void main( String[] args ) { try { //System.loadLibrary( libraryName , true); System.loadLibrary( libraryName ); } catch (UnsatisfiedLinkError e) { synchronized (callbackLock) { if (failureCallback != null) { failureCallback.run(); } } } sayHello(); } } ------HelloWorld.c----- #include using namespace std; #include "HelloWorld_jni.h" JNIEXPORT void JNICALL Java_HelloWorld_sayHello( JNIEnv *env, jclass c ) { cerr << "Hello World from C!" << endl; } ------Makefile-----just do make test JAVA_HOME?='c:/PROGRA~1/Java/jdk1.6.0_24' clean: set nonomatch;\ rm -rf ./bin Native.dll *.o *_jni.h HelloWorld.class: HelloWorld.java javac HelloWorld.java HelloWorld_jni.h :HelloWorld.class javah -classpath . -o HelloWorld_jni.h HelloWorld Native.dll: HelloWorld.c HelloWorld_jni.h Makefile $(CXX) \ -D_REENTRANT -D_GNU_SOURCE -D__int64='long long' \ -I${JAVA_HOME}/include -I${JAVA_HOME}/include/win32 -I. \ $< $(LDFLAGS) -o $@ Native.dll:LDFLAGS=-mno-cygwin Native.dll:LDFLAGS=-shared Native.dll:LDFLAGS=-shared -Wl,--add-stdcall-alias Native.dll:LDFLAGS=-shared -Wl,--verbose,--warn-unresolved-symbols,--add-stdcall-alias Native.dll:LDFLAGS=-shared -Wl,--verbose,--warn-unresolved-symbols,--add-stdcall-alias,--add-indirect Native.dll:LDFLAGS=-shared -Wl,--verbose,--warn-unresolved-symbols,--add-stdcall-alias,--add-stdcall-underscore Native.dll:LDFLAGS=-shared -Wl,--verbose,--warn-unresolved-symbols,--add-stdcall-alias,--add-underscore Native.dll:LDFLAGS=-shared -Wl,--verbose,--error-unresolved-symbols,--add-stdcall-alias --add-underscore Native.dll:LDFLAGS=-shared -Wl,--verbose,--error-unresolved-symbols,--add-stdcall-alias,--export-dynamic Native.dll:CXX= Native.dll:CXX=g++ --verbose comma:= , semicomma:= ; empty:= space:= $(empty) $(empty) test:LD_LIBRARY_PATH:=$(subst $(space),$(semicomma),$(addprefix 'c:/cygwin',/usr/lib/gcc/i686-pc-cygwin/4.3.4 /usr/lib/gcc/i686-pc-cygwin/4.3.4 /usr/lib/gcc/i686-pc-cygwin/4.3.4/../../../ /lib/ /usr/lib/)) test: Native.dll LD_LIBRARY_PATH="$(LD_LIBRARY_PATH)" java -verbose -classpath . -Xmx256m -Djava.library.path=. HelloWorld ifneq (,) nm -u Native.dll w __Jv_RegisterClasses w __ZdaPv w __ZdaPvRKSt9nothrow_t w __ZdlPv w __ZdlPvRKSt9nothrow_t w __Znaj w __ZnajRKSt9nothrow_t w __Znwj w __ZnwjRKSt9nothrow_t U ___crt_xc_end__ U ___crt_xc_start__ U ___crt_xi_end__ U ___crt_xi_start__ U ___crt_xl_start__ U ___crt_xp_end__ U ___crt_xp_start__ U ___crt_xt_end__ U ___crt_xt_start__ U ___tls_end__ U ___tls_start__ U __end__ endif -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple