2010-09-10 6 views
5

Ich versuche, eine DLL zu erstellen, die Qt aufrufen wird (derzeit kann ich Jambi nicht für die Funktionalität, die ich brauche) verwenden. Ich habe eine einfache Java-Methode:Erstellen Sie eine JNI-DLL mit MINGW

public final native int createChild(int handle); 

Ich erstellte C-Projekt in Visual Studio Express 2010 und konnte die DLL erstellen.

Dann habe ich ein Projekt in Qt Creator erstellt und meine Quellen dorthin verschoben. Ich habe versucht, den Build zu einem besten Wissen und Gewissen zu konfigurieren, aber alles, was ich bekommen ist:

java.lang.UnsatisfiedLinkError: tools.proofofconcept.control.EmbedderComposite.createChild(I)I 

Meine Vermutung ist, dass Symbol nicht richtig von DLL exportiert wird. Ich habe -D_JNI_IMPLEMENTATION_ Linker arg:

g++ -D_JNI_IMPLEMENTATION_ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -shared -mthreads -Wl -Wl,--out-implib,debug\libqt_integration.a -o debug\qt_integration.dll debug/dllmain.o debug/nativecode.o debug/qmfcapp.o debug/qwinwidget.o debug/moc_qwinwidget.o -L"c:\Qt\2010.05-rc1\qt\lib" -lQtGuid4 -lQtCored4 

Antwort

6

Ich sollte folgendes Argument hinzugefügt haben:

-Wl,--kill-at 

Es wird exportiert Symbole Format ändern.

2

Wenn Sie Qt verwenden, stellen Sie sicher, welche Konfiguration verwendet wird. Standardmäßig wird die "default" -Konfiguration verwendet (Ordner "mkspecs/default") und bei win32 wird "UnatisfiedLinkError" ausgelöst.