|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
richiamare libreria c++ tramite jni
ciao a tutti, ho qualche problemuccio col richiamare una libreria c++ da java, in pratica questa libreria fornisce un'api (metodi statici di una classe), e al momento della compilazione mi genera librerie statiche (per intenderci, files .a), io ho scritto la classe java, l'header nativo l'ho fatto generare da javah, e quindi ho implementato i metodi nativi che vanno a richiamare la classe, compilo con il seguente comando:
Codice:
g++ -fPIC -I /usr/lib/java/include/ -I /usr/lib/java/include/linux/ -I /usr/local/include/tesseract/ -L/usr/local/lib/ -ltesseract_main -shared -o OcrApi.so it_dart_ocrapi_OcrApi.cpp
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
JNI non maneggia librerie statiche, nel senso che non puoi caricare una libreria statica con System.loadLibrary. Puoi caricare una libreria dinamica collegata ad una libreria statica. La soluzione di eventuali problemi che possono sorgere in questo passaggio spetta alla lingua nativa, al suo compilatore, eccetera.
__________________
Uilliam Scecspir ti fa un baffo? Gioffri Cioser era uno straccione? E allora blogga anche tu, in inglese come me! |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
Quote:
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
nessuno sa aiutarmi?
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
La differenza tra i due modi la spiega bene il 'man': The only difference between using an -l option and specifying a file name is that -l surrounds library with lib and .a and searches several directories.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
Quote:
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Fammi capire...vuoi convertire una libreria statica in una libreria dinamica?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
allora, in pratica io c'ho una lib statica, e ho fatto un wrapper diciamo, che devo usa la libreria statica, ma che deve essere caricata dinamicamente in java...non è proprio convertire la lib da statica a dinamica, dato che mi serve il wrapper che si interfacci con JNI.....
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Puoi riportare la tua completa riga di comando con cui fai il link finale?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
Quote:
g++ -fPIC -I /usr/lib/java/include/ -I /usr/lib/java/include/linux/ -I /usr/local/include/tesseract/ -L/usr/local/lib/ -ltesseract_main -shared -o OcrApi.so it_dart_ocrapi_OcrApi.cpp dove libtesseract_main.a è la lib statica da caricare.....
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
-ltesseract_main deve seguire it_dart_ocrapi_OcrApi.cpp, altrimenti viene scartato dal linker. Un bel objdump -t può mostrartelo. Nota inoltre che gli oggetti .o di tesseract_main che non vengono riferiti da it_dart_ocrapi_OcrApi.cpp, vengono anch'essi scartati. Se il file cpp è solo un wrapper per tesseract_main, probabilmente non è il tuo caso.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
Quote:
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
Sarà tutto ok quando riuscirai a fare un bel LD_PRELOAD=<tuo so> cat /proc/self/maps senza ottenere errori, e potendo vedere la tua libreria nell'elenco stampato.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 Ultima modifica di ilsensine : 17-05-2007 alle 14:02. |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ok, grazie a tutti, sono riuscito a richiamare sta cavolo di libreria da java, anche se, ilsensine, facendo un bel LD_PRELOAD=<tuo so> cat /proc/self/maps mi da cmq errore..ma tanto chis se ne frega, riesco a richiamarla in java
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
ragazzi, dovrei realizzare una dll in modo da far funzionare il mio codice anche su win, considerando che la lib che sto usando supporta anche win, anzi, nell'ultima versione hanno prodotto loro stessi una dll...solo che ho esperienza zero su win...
nel readme c'è scritto questo: Quote:
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Puoi usare cygwin, a patto di usare gcc con l'opzione mingw. Oppure puoi installare msys+mingw. Non dovrebbe esserci bisogno del .lib; meglio ancora se compili tessdll con mingw.
Nota che ora dovresti veramente risolvere questo: Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#17 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
grazie ancora, ma c'è un modo per capire per quale motivo da errore il preload della libreria?
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#18 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Dovrebbe stamparti sulla console il motivo, ad es. quale è il simbolo non risolto.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2002
Città: Cosenza --> Roma
Messaggi: 853
|
strano, a me da solo un errore generico:|....adesso non sono dal mio pc, più tardi appena posso posto l'errore che mi da...
__________________
GNU MyServer Wants YOU!! We live thinking we will never die. We die thinking we had never lived. Jason Becker |
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Poco male, quando farai la dll vedrai tutti gli errori di linking. Probabilmente devi linkare qualche libreria java.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:34.




















