Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90

    Link a librerie in binario da java

    Salve
    mi è stata fornita una libreria in codice binario, alla quale devo passare dei puntatori affinchè essa mi restituisca un certo output. So come fare questa cosa in C++, utilizzando il compilatore per linkare la libreria alla classe che sto compilando ( g++ -o file.test file.cxx -libreria ), ma come mi comporto con java? Non capisco se è materialmente possibile fare una cosa del genere

    Volendo, avrei anche l'alternativa di usare questa libreria già compilata, ma in questo caso dovrei far "eseguire" al mio programma java un comando sul terminale... cosa che credo sia fuori da ogni canone di programmazione.

    Qualcuno mi sa dare una mano? Sto sbagliando del tutto approccio?
    Grazie
    Mic
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    torniamo alle basi di java:

    java è un linguaggio ad oggetti compilato ed interpretato.
    Il compilatore infatti crea il bytecode (con javac) che poi verrà interpretato in esecuzione dalla jvm. E' possibile richiamare un comando di sistema dall'interno di java e qui ti lascio due esempi

    http://www.greenspun.com/bboard/q-an...?msg_id=006Tv9

    http://www.computing.net/answers/pro...ava/10121.html

    ricordandoti di fare attenzione anche al sistema operativo da cui esegui (es. in linux non troverai cmd ma bash )

    Esiste anche la soluzione JNI (ti lascio a wikipedia)

    http://en.wikipedia.org/wiki/Java_Native_Interface

    che potrebbe aiutarti.

    Un consiglio però: se devi fare tante chiamate di questo tipo, magari è più efficiente usare un altro linguaggio di programmazione (es C++) che già sai usare e soprattutto ti consente di ottimizzare. Oltretutto è una soluzione che mi piace poco visto che stai riducendo la portabilità di java (a mio parere) legandolo a chiamate native e/o di sistema.

    Spero di essere stata chiara

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Puoi utilizzare JNI.
    Tramite la specifica JNI puoi utilizzare codice nativo dall'interno di Java.

    Per Windows, ad esempio, è sufficiente scrivere una DLL che rispetti alcune regole specificate da JNI, quindi puoi far caricare la libreria al tuo programma Java (usando System.loadLibrary()) e richiamarne le funzioni da essa esposte.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2006
    Messaggi
    90
    Originariamente inviato da valia
    E' possibile richiamare un comando di sistema dall'interno di java e qui ti lascio due esempi
    ricordandoti di fare attenzione anche al sistema operativo da cui esegui (es. in linux non troverai cmd ma bash )

    Un consiglio però: se devi fare tante chiamate di questo tipo, magari è più efficiente usare un altro linguaggio di programmazione (es C++) che già sai usare e soprattutto ti consente di ottimizzare. Oltretutto è una soluzione che mi piace poco visto che stai riducendo la portabilità di java (a mio parere) legandolo a chiamate native e/o di sistema.
    Purtroppo devo usare per forza java. Fortunatamente è una applicazione che non ha la necessità di essere portatile, deve girare su una macchina linux 64 bit fino alla morte, quindi il problema della portabilità non c'è (quasi)...
    Grazie per gli esempi!

    Originariamente inviato da LeleFT
    Puoi utilizzare JNI.
    Tramite la specifica JNI puoi utilizzare codice nativo dall'interno di Java.

    Per Windows, ad esempio, è sufficiente scrivere una DLL che rispetti alcune regole specificate da JNI, quindi puoi far caricare la libreria al tuo programma Java (usando System.loadLibrary()) e richiamarne le funzioni da essa esposte.
    Questa notte ho scoperto questa JNI, e ho scoperto appunto che deve rispettare delle regole affinchè funzioni dentro java. Il problema è che librerie condivise non le ho scritte io e non ho accesso al codice! Non capisco se chi le ha scritte abbia previsto (e come?) che chiunque possa accedere con qualsiasi linguaggio o meno!
    Le istruzioni che mi vengono sono

    Code generation takes a buffer of floating point PCM data sampled at 22050 Hz and mono.
    Codegen * pCodegen = new Codegen(_pSamples, _NumberSamples, offset);
    After compute, you want to call pCodegen->getCodeString() to get the code string.
    con Codegen che è appunto la liberia condivisa...
    Magari provo a chiedere a loro, eh
    Se hai paura di chiedere, vuol dire che ti vergogni ad imparare...

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Eberk89
    Questa notte ho scoperto questa JNI, e ho scoperto appunto che deve rispettare delle regole affinchè funzioni dentro java. Il problema è che librerie condivise non le ho scritte io e non ho accesso al codice! Non capisco se chi le ha scritte abbia previsto (e come?) che chiunque possa accedere con qualsiasi linguaggio o meno!
    Ma questo non ha alcuna importanza: tu scrivi una DLL che rispetta le regole di JNI. Poi questa DLL può fare quello che vuole, quindi può andare ad utilizzare le librerie che hai tu esattamente come faresti all'interno di un programma scritto in C++.

    Quello che fa JNI è permettere di avere "un ponte" fra il codice Java ed il codice delle tue librerie. A nessuno importa di come siano scritte le librerie originali.

    Schematizzando:

    Java --> DLL che fa da ponte --> Librerie originali in codice nativo


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.