2013-05-13 30 views
6

Ciao Non ho trovato la soluzione su come creare una dll a 64 bit. E usa i suoi metodi C++ nativi. Io uso il codice Java metodynatywne.java:Come generare DLL a 64 bit quale compilatore gcc o altro. Impossibile caricare .dll IA a 32 bit su una piattaforma AMD a 64 bit

class metodynatywne { 

static { 
    System.loadLibrary("metodynatywne"); 
} 
native public void sayHello(); 

public static void main (String argv[]) 
{ 
    new metodynatywne().sayHello(); 
} } 

metodynatywne.h poi generato utilizzando javah metodynatywne -jni

ho scritto il codice metodynatywne.cpp:

#include <jni.h> 
    #include <iostream> 
    #include "metodynatywne.h" 
    using namespace std; 

    JNIEXPORT void JNICALL 
    Java_metodynatywne_sayHello(JNIEnv * env, jobject self) 
     { 
cout << "Hello World!" << endl; 
    } 

ho ussed gcc per creare il mio dll con i comandi:

c:\>c++ -I c:\java7\include -I c:\java7\include\win32 -c metodynatywne.cpp 

e

c:\>c++ -shared metodynatywne.o -o metodynatywne.dll 

e quello che quello che sto ricevendo è messaggio di errore:

c:\>java metodynatywne 
Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\Programowanie\UJ\Semestr2\ZPG\PerfCount\cwiczenie\metodynatywne.dll: Can't lo 
ad IA 32-bit .dll on a AMD 64-bit platform 
    at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
    at java.lang.ClassLoader.loadLibrary1(Unknown Source) 
    at java.lang.ClassLoader.loadLibrary0(Unknown Source) 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at metodynatywne.<clinit>(metodynatywne.java:4) 

ho usato Java 1.4 a 32 bit javac compilatore e Java7 x64 compilatore entrambi metods mi ha dato lo stesso errore. Come posso affrontarlo? Usa un altro compilatore C++ se sì, come forzare questo compilatore a creare utilizzabile dal mio file java dll. Lavoro su Windows 7 a 64 bit.

Come posso ricavare dal file cpp una dll a 64 bit (con gcc)? O altro compilatore di riga di comando?

Grazie mille per eventuali commenti e aiuto forniti.

+0

Ho lo stesso problema, hai trovato una soluzione? –

risposta

0

è necessario ricompilare la DLL a 64 bit (è necessario scaricare a 64-bit strumenti di compilazione). Inoltre è possibile passare a JVM a 32 bit (basta scaricare JVM a 32 bit).

0

Questo flag compilatore dovrebbe aiutare: C++ --64 -DARCH_X86_64 = 1 file.cpp

0

Ancora nessuna risposta accettata su questo, quindi mi mordere ... Come accennato Denis, ti è necessario scaricare un compilatore a 64 bit per generare il tuo .dll. In questi giorni la maggior parte delle persone usa MinGW-w64 per questo su Windows (http://www.mingw.org o download diretto qui http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files) che ha un bel pacchetto di installazione. Attenzione: se non si utilizza il pacchetto di installazione, è necessario installare l'intera toolchain da soli. Quindi dovresti usare questo eseguibile del compilatore a 64 bit (qualcosa come 'x86_64-w64-mingw32-g ++') invece del gcc a 32 bit per generare la tua libreria.

Come notato sopra, si ha bisogno di essere attenti circa la versione di Java che si sta utilizzando per essere sicuri che corrisponde all'architettura della libreria C++ che avete compilato. Ciò significa sia l'auto-generazione di Javah dell'intestazione JNI che il runtime Java da cui viene chiamata.

Problemi correlati