2010-09-10 17 views
5

J'essaye de créer une DLL qui appellera Qt (actuellement je ne peux pas employer Jambi pour la fonctionnalité dont j'ai besoin). J'ai une méthode Java simple:Créer une DLL JNI en utilisant MINGW

public final native int createChild(int handle); 

J'ai créé le projet C dans Visual Studio Express 2010 et j'ai pu créer la DLL. Puis j'ai créé un projet dans Qt Creator et y ai déplacé mes sources. J'ai essayé de configurer la construction d'un meilleur de ma connaissance, mais tout ce que je reçois est:

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

Je pense que le symbole est pas correctement exporté de DLL. J'ai ajouté -D_JNI_IMPLEMENTATION_ éditeur de liens 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 

Répondre

6

J'ai ajouté l'argument suivant:

-Wl,--kill-at 

Il va changer le format des symboles exportés.

2

Si vous utilisez Qt, vérifiez quelle configuration est utilisée. Par défaut, la configuration "default" est utilisée (dossier "mkspecs/default") et pour win32 cela provoque "UnsatisfiedLinkError".