Java.lang.UnsatisfiedLinkError

Estou fazendo mudanças de localização (novos pacotes) de processos já existentes, mas quando vou executar através do eclipse uma da classes que acessam funções NATIVAS em C++ me envia esta exception, isto pode ocorrer por alguma path ou dll no local fisico da pasta ?

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: SMGetScannerCount at br.com.verifinger.ScanMan.ScanMan.SMGetScannerCount(Native Method)

Gente…ninguém pode me dar uma dica ??

Esse erro costuma dar quando sua DLL não está no PATH (não no CLASSPATH). Sete o PATH corretamente ou então copie a DLL para o diretório SYSTEM32 (no XP e 2003, normalmente c:\windows\system32; no 2000 e NT, normalmente c:\winnt\system32; e no 98 e ME, normalmente c:\windows\system.)

Fiz as alterações informadas mas infelizmente não resolveu o problema, segue mais algumas informações para que vc me ajudem, a estrutura de package estão divididas em 2 sistemas, circularsantaluzia e verifinger:
br.com.circularsantaluzia.pontoeletronico (aqui dentro as classes que estou denvolvendo) no outro pacote é de terceiro do qual esta br.com.verifinger.VeriFinger (onde tenho a class VeriFingerWrapper.java que encapsula as funções nativas) e br.com.verifinger.library (onde coloquei várias .dll e h que são acessadas pela VeriFingerWrapper.class).

Deste gerei um .jar e estou executando da seguinte forma: java -ss262144 -oss819200 -classpath ponto.jar br.com.circularsantaluzia.pontoeletronico.RegistraBiometriaFuncionario mas ocorre o erro de não encontrar as funções nativasException in thread "main" java.lang.UnsatisfiedLinkError: VFInitialize at br.com.verifinger.VeriFinger.VeriFingerWrapper.VFInitialize(Native Method) at br.com.circularsantaluzia.pontoeletronico.RegistraBiometriaFuncionario.initVFinger(RegistraBiometriaFuncionario.java:622)
Por favor, alguém sabe o que estou fazendo de errado ?

Gente…alguém na escuta ! Coloquei o loadLibrary no inicio da classe RegistraDigitalFuncionario e a mesma não deu erro, da a impressão que ela achou sem problemas, agora quando ela chama via a class VeriFingerWrapper ocorre o problema de não achar este método. Como disse anteriormente se coloca-las sem identificação de package ela funciona, isto é, deixar na raiz. Please help :frowning: -me.

Se você é que gerou a DLL JNI sabe que há diferença entre gerar (com javah ) o código nativo para “br.com.qqcoisa.MinhaClasse” e “MinhaClasse”.
Se está funcionando sem o package, não tem como você mudar o fonte Java para usar o package sem mudar a DLL.

Tingo, sou iniciante em java e por isto tenho muitas dúvidas, mas me diga, eu comprei esta .dll de uma empresa da qual não tenho acesso a regerar estas dll(s) que estão em C++, eles me enviaram uma demo em java de como utilizar tais dll(s), o que fiz foi tentar usar a demo deles integrando com meu desenvolvimento, so que gostaria de colocar esta “demo” dentro de um pacote, cuja demo eu tenho acesso aos .java, mesmo assim eu não conseguirei acessar ?

Sinval,

E como você está utilizando a propriedade java.library.path ?

Utilização

java.library.path="caminho da DLL"

Talvez ela possa te ajudar.

java -ss262144 -oss819200 -classpath -Djava.library.path=caminho ponto.jar br.com.circularsantaluzia.pontoeletronico.RegistraBiometriaFuncionario

Pessoal, eu também estou tendo problemas para acessar uma biblioteca no Linux.

Aqui no trabalho tenho uma biblioteca libdisptec55.so que trabalha com display de teclado Gertec e eu preciso acessar os métodos dela em Java. Eu fiz um exemplo em C que utiliza as funções da biblioteca e este deu certo, mas quando eu faço no Java, dá esse erro: Exception in thread “main” java.lang.UnsatisfiedLinkError: TestaTEC.abrirConexao()V
at TestaTEC.abrirConexao(Native Method)
at TestaTEC.main(TestaTEC.java:14)

Aí eu criei um header disptec55.h:

#include <stdio.h>
#include <stdlib.h>

void abrirConexao();
void fecharConexao();
int displayString(char *str);
int displayCaractere(char chr);
int posicionaCursor(int c, int l);
int limpaDisplay();
int limpaLinha(int l);

O meu exemplo em C é este:

#include "disptec55.h"
int main(int argc, char **argv){
    abrirConexao();
    return 0;
}

E o meu exemplo em Java é este:

public class TestaTEC{
    public native void abrirConexao();
    public native void fecharConexao();
    public native int displayString(String str);
    public native int displayCaractere(char chr);
    public native int posicionaCursor(int c, int l);
    public native int limpaDisplay();
    public native int limpaLinha(int l);
    static{
      System.loadLibrary("disptec55");
    }
    public static void main(String... args){
      TestaTEC t = new TestaTEC();
      t.abrirConexao();
    }
}

O que posso estar fazendo errado? A biblioteca está em /usr/lib e jre/lib/i386

Se puderem me ajudar, muito obrigado!