2010-01-02 19 views
5

JNI kullanan bir Java kitaplığı derlemeye çalışıyorum. Programı başlattığımda, özel bir yöntemin DLL'de bulunamadığını belirten bir UnsatisfiedLinkError ile bir kilitlenme görüyorum.g ++: Dışa aktarılan semboller nasıl çözülür

Daha yakından incelediğimizde, derleme ve bağlama için kullandığım g ++, yöntem adlarına "@ 8" veya "@ 16" gibi sonek ekleyerek yöntem adlarımı karıştırdığını öğrendim. İsim manglingini devre dışı bırakmak için doğru derleyici seçeneklerini bilen var mı? Şimdiden teşekkürler!

EDIT: Eclipse + CDT eklentisi aracılığıyla MinGW kullanıyorum. JNI için

cevap

12

bağladıktan faz üzerinde GCC bir eklenti stdcall-takma parametresini eklemeniz gerekir GCC ile derlenmiş Windows dll ile görüşmeleri yapabilmek:

gcc -Wl,--add-stdcall-alias 
DLL doğru işlev adlarını katacak

ve böylece JNI aracılığıyla aramaları etkinleştirin.

+0

Çok teşekkürler! Bu nihayet benim problemimi çözdü. Bu parametreyle, DLL'deki her bir yöntem için dekore edilmiş ve bir sürüm olmayan sürümü vardır ve Java programları çalışır: D –

+0

@Mavrik Bunu doldurduğunuz için teşekkür ederim, sorunu biliyordum ama çözümü değil. – bmargulies