2013-05-13 5 views
6

Hallo Ich habe keine Lösung gefunden, wie 64-Bit-DLL zu erstellen. Und verwenden Sie seine nativen C++ - Methoden. Ich benutze Java-Code metodynatywne.java:Wie 64-Bit-DLL zu generieren, die GCC-Compiler oder andere. Kann nicht laden IA 32-Bit-DLL auf einer AMD 64-Bit-Plattform

class metodynatywne { 

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

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

dann erzeugt metodynatywne.h mit javah -jni metodynatywne

I metodynatywne.cpp Code geschrieben:

#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; 
    } 

ich gcc ussed meiner zu erstellen dll mit Befehlen:

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

und

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

und was, was ich bekomme ist Fehlermeldung:

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) 

ich Java 1.4 32-Bit-Compiler javac und Java7 x64-Compiler verwenden beide metods gab mir den gleichen Fehler. Wie kann ich damit umgehen? Verwenden Sie einen anderen C++ - Compiler, wenn ja, wie erzwingt, dass dieser Compiler von meiner Java-DLL-Datei verwendet werden kann. Ich arbeite unter Windows 7 64 Bit.

Wie kann ich aus der cpp-Datei eine 64-Bit-DLL (mit gcc) machen? Oder andere Comand Line Compiler?

Vielen Dank für Kommentare und Hilfe zur Verfügung gestellt.

+0

Ich habe das gleiche Problem, haben Sie zufällig eine Lösung gefunden? –

Antwort

0

Sie sollten die DLL für 64-Bit neu kompilieren (Sie müssen 64-Bit-Build-Tools herunterladen). Außerdem können Sie zu 32-Bit-JVM wechseln (laden Sie einfach 32-Bit-JVM herunter).

0

sollte dieser Compiler-Flag helfen: C++ --64 -DARCH_X86_64 = 1 file.cpp

0

Immer noch keine akzeptierte Antwort auf diese, ich werde so beißen ... Wie Denis erwähnt, werden Sie Sie müssen einen 64-Bit-Compiler zum Generieren Ihrer DLL herunterladen. In diesen Tagen verwenden die meisten Leute MinGW-w64 dafür unter Windows (http://www.mingw.org oder direkt hier herunterladen http://sourceforge.net/projects/mingw-w64/files/latest/download?source=files), die ein ziemlich schönes Installationspaket hat. Achtung - Wenn Sie das Installationspaket nicht verwenden, müssen Sie die gesamte Toolchain selbst installieren. Dann würden Sie diese 64-Bit-Compiler-Programmdatei (etwas wie "x86_64-w64-mingw32-g ++") anstelle des 32-Bit-gcc verwenden, um Ihre Bibliothek zu generieren.

Wie bereits erwähnt, müssen Sie bei der von Ihnen verwendeten Java-Version vorsichtig sein, um sicherzustellen, dass sie der Architektur der von Ihnen kompilierten C++ - Bibliothek entspricht. Dies bedeutet sowohl die automatische Java-Generierung Ihres JNI-Headers als auch die Java-Laufzeit, von der Sie es aufrufen.

Verwandte Themen