class ELF errada: ELFCLASS32 (causa possível: incompatibilidade de largura de palavra de arquitetura)

Eu tenho essa estranha exceção dizendo a class ELF errada, mas o wrapper está configurado corretamente.

Para ler o cartão de identidade belga usando este SDK no site oficial da Belgiun ID Card Issuers: http://eid.belgium.be/en/binaries/beid-sdk-3.5.3-ubuntu-9.10-i686-6193_tcm147-94066_tcm406-114986. tgz

$ uname -a # Using NetBeans IDE 7.3 in Ubuntu 12.10 64-bit Linux sun-M14xR2 3.5.0-25-generic #39-Ubuntu SMP Mon Feb 25 18:26:58 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux $ java -version java version "1.7.0_15" OpenJDK Runtime Environment (IcedTea7 2.3.7) (7u15-2.3.7-0ubuntu1~12.10.1) OpenJDK 64-Bit Server VM (build 23.7-b01, mixed mode) 

Código:

 package javaapplication1; import java.lang.*; import be.belgium.eid.*; public class JavaApplication1 { //***************************************************************************** // Get the data and dump to the screen // Beware: The data coming from the cards is encoded in UTF8! //***************************************************************************** private static void getSISData(BEID_SISCard card) throws Exception { BEID_SisId sisId = card.getID(); System.out.println(); System.out.println("\tPeronal data:"); System.out.println("\t-------------"); System.out.println("\tName : " + sisId.getName()); System.out.println("\tSurname : " + sisId.getSurname()); System.out.println("\tInitials : " + sisId.getInitials()); System.out.println("\tGender : " + sisId.getGender()); System.out.println("\tDateOfBirth : " + sisId.getDateOfBirth()); System.out.println("\tSocialSecurityNumber : " + sisId.getSocialSecurityNumber()); System.out.println(); System.out.println("\tCard data:"); System.out.println("\t----------"); System.out.println("\tLogicalNumber : " + sisId.getLogicalNumber()); System.out.println("\tDateOfIssue : " + sisId.getDateOfIssue()); System.out.println("\tValidityBeginDate : " + sisId.getValidityBeginDate()); System.out.println("\tValidityEndDate : " + sisId.getValidityEndDate()); } //***************************************************************************** // Get the data from a Belgian SIS card //***************************************************************************** private static void getSISCardData(BEID_ReaderContext readerContext) throws Exception { BEID_SISCard card = readerContext.getSISCard(); getSISData(card); } //***************************************************************************** // Get the data and dump to the screen // Beware: The data coming from the cards is encoded in UTF8! //***************************************************************************** private static void getEIDData(BEID_EIDCard card) throws Exception { BEID_EId eid = card.getID(); if (card.isTestCard()) { card.setAllowTestCard(true); System.out.println(""); System.out.println("Warning: This is a test card."); } System.out.println("\tDocumentVersion : " + eid.getDocumentVersion()); System.out.println("\tDocumentType : " + eid.getDocumentType()); System.out.println(); System.out.println("\tPeronal data:"); System.out.println("\t-------------"); System.out.println("\tFirstName : " + eid.getFirstName()); System.out.println("\tSurname : " + eid.getSurname()); System.out.println("\tGender : " + eid.getGender()); System.out.println("\tDateOfBirth : " + eid.getDateOfBirth()); System.out.println("\tLocationOfBirth : " + eid.getLocationOfBirth()); System.out.println("\tNobility : " + eid.getNobility()); System.out.println("\tNationality : " + eid.getNationality()); System.out.println("\tNationalNumber : " + eid.getNationalNumber()); System.out.println("\tSpecialOrganization: " + eid.getSpecialOrganization()); System.out.println("\tMemberOfFamily : " + eid.getMemberOfFamily()); System.out.println("\tAddressVersion : " + eid.getAddressVersion()); System.out.println("\tStreet : " + eid.getStreet()); System.out.println("\tZipCode : " + eid.getZipCode()); System.out.println("\tMunicipality : " + eid.getMunicipality()); System.out.println("\tCountry : " + eid.getCountry()); System.out.println("\tSpecialStatus : " + eid.getSpecialStatus()); System.out.println(""); System.out.println("\tCard data:"); System.out.println("\t----------"); System.out.println("\tLogicalNumber : " + eid.getLogicalNumber()); System.out.println("\tChipNumber : " + eid.getChipNumber()); System.out.println("\tValidityBeginDate : " + eid.getValidityBeginDate()); System.out.println("\tValidityEndDate : " + eid.getValidityEndDate()); System.out.println("\tIssuingMunicipality: " + eid.getIssuingMunicipality()); } //***************************************************************************** // Get the data from a Belgian kids EID card //***************************************************************************** private static void getKidsCardData(BEID_ReaderContext readerContext) throws Exception { BEID_KidsCard card = readerContext.getKidsCard(); getEIDData(card); } //***************************************************************************** // Get the data from a Belgian foreigner EID card //***************************************************************************** private static void getForeignerCardData(BEID_ReaderContext readerContext) throws Exception { BEID_ForeignerCard card = readerContext.getForeignerCard(); getEIDData(card); } //***************************************************************************** // Get the data from a Belgian EID card //***************************************************************************** private static void getEidCardData(BEID_ReaderContext readerContext) throws Exception { BEID_EIDCard card = readerContext.getEIDCard(); getEIDData(card); } //***************************************************************************** // get a string representation of the card type //***************************************************************************** private static String getCardTypeStr(BEID_ReaderContext readerContext) throws Exception { String strCardType = "UNKNOWN"; BEID_CardType cardType = readerContext.getCardType(); if (cardType == BEID_CardType.BEID_CARDTYPE_EID) { strCardType = "BEID_CARDTYPE_EID"; } else if (cardType == BEID_CardType.BEID_CARDTYPE_KIDS) { strCardType = "BEID_CARDTYPE_KIDS"; } else if (cardType == BEID_CardType.BEID_CARDTYPE_FOREIGNER) { strCardType = "BEID_CARDTYPE_FOREIGNER"; } else if (cardType == BEID_CardType.BEID_CARDTYPE_SIS) { strCardType = "BEID_CARDTYPE_SIS"; } else { strCardType = "BEID_CARDTYPE_UNKNOWN"; } return strCardType; } //***************************************************************************** // Show the info of the card in the reader //***************************************************************************** private static void showCardInfo(String readerName) throws Exception { BEID_ReaderContext readerContext = BEID_ReaderSet.instance().getReaderByName(readerName); if (readerContext.isCardPresent()) { System.out.println("\tType : " + getCardTypeStr(readerContext)); BEID_CardType cardType = readerContext.getCardType(); if (cardType == BEID_CardType.BEID_CARDTYPE_EID) { getEidCardData(readerContext); } else if (cardType == BEID_CardType.BEID_CARDTYPE_KIDS) { getKidsCardData(readerContext); } else if (cardType == BEID_CardType.BEID_CARDTYPE_FOREIGNER) { getForeignerCardData(readerContext); } else if (cardType == BEID_CardType.BEID_CARDTYPE_SIS) { getSISCardData(readerContext); } else { } } } //***************************************************************************** // Show the reader info an get the data of the card if present //***************************************************************************** private static void showReaderCardInfo(String readerName) throws Exception { BEID_ReaderContext readerContext = BEID_ReaderSet.instance().getReaderByName(readerName); System.out.println("Reader: " + readerName); System.out.println("\tCard present: " + (readerContext.isCardPresent() ? "yes" : "no")); showCardInfo(readerName); System.out.println(""); } //***************************************************************************** // scan all the card readers and if a card is present, show the content of the // card. //***************************************************************************** private static void scanReaders() throws Exception { long nrReaders = BEID_ReaderSet.instance().readerCount(); System.out.println("Nr of card readers detected: " + nrReaders); for (int readerIdx = 0; readerIdx < nrReaders; readerIdx++) { String readerName = BEID_ReaderSet.instance().getReaderName(readerIdx); showReaderCardInfo(readerName); } } //***************************************************************************** // Main entry point //***************************************************************************** public static void main(String argv[]) { System.out.println("[Info] eID SDK sample program: read_eid"); String osName = System.getProperty("os.name"); if (-1 != osName.indexOf("Windows")) { System.out.println("[Info] Windows system!!"); System.loadLibrary("beid35libJava_Wrapper"); } else { System.loadLibrary("beidlibJava_Wrapper"); } try { BEID_ReaderSet.initSDK(); scanReaders(); } catch (BEID_Exception e) { System.out.println("[Catch] BEID_Exception:" + e.GetError()); } catch (Exception e) { System.out.println("[Catch] Exception:" + e.getMessage()); } try { BEID_ReaderSet.releaseSDK(); } catch (BEID_Exception e) { System.out.println("[Catch] BEID_Exception:" + e.GetError()); } catch (Exception e) { System.out.println("[Catch] Exception:" + e.getMessage()); } } } 

Saída:

 [Info] eID SDK sample program: read_eid Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/sun/Downloads/beidsdk/beidlib/Java/unsigned/libbeidlibJava_Wrapper.so.3.5.3: /home/sun/Downloads/beidsdk/beidlib/Java/unsigned/libbeidlibJava_Wrapper.so.3.5.3: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1750) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1675) at java.lang.Runtime.loadLibrary0(Runtime.java:840) at java.lang.System.loadLibrary(System.java:1047) at javaapplication1.JavaApplication1.main(JavaApplication1.java:269) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds) 

EDITAR:

https://code.google.com/p/eid-viewer/ https://code.google.com/p/eid-mw/

Ele não funciona porque você está usando uma versão de 64 bits do Java, e o SDK que você está tentando usar contém uma biblioteca nativa de 32 bits ( libbeidlibJava_Wrapper.so.3.5.3 ). O JRE de 64 bits não pode carregar bibliotecas nativas de 32 bits.

Você precisará usar uma versão de 32 bits do Java ou encontrar uma versão do SDK que tenha bibliotecas nativas de 64 bits.

Intereting Posts