View Full Version : Includere codice C/C++ in java
pieggi
11th July 2004, 20:52
Ciao, ho visto che esiste il JNI (http://java.sun.com/j2se/1.4.2/docs/guide/jni/) per includere codice C in un'applicazione java.
Ho poi scoperto su sourceforge che c'è un progetto, JACE (http://sourceforge.net/projects/jace/), anche se mi sembra poco platform-indipendent.
Ma
da quel che ho capito (http://java.sun.com/docs/books/tutorial/native1.1/stepbystep/index.html) devo comunque fornire due files all'utilizzatore (il .class e il .so ).
C'è modo di wrappare completamente il codice c e aver all fine solo un .class o comunque poter raggruppare tutto in un unico file (ad es. un jar) ?
SunBeam
11th July 2004, 22:52
Non in questo modo: il progetto al quale collaboro http://java-gnome.sourceforge.net/
è proprio un layer JNI per gnome.
E' necessario avere i file jar (nel CLASSPATH) e le librerie .so (nel LD_LIBRARY_PATH).
Grazie agli sforzi di vari progetti (gcj, classpath etc..), ora è possibile compilare il java con gcc.
Più precisamente con gcj.
Cosa c'è di nuovo?
Che essendo un compilatore della GNU è molto flessibile:
può compilare bytecode java, ma soprattutto, ed è questo il bello, può creare un eseguibile normalissimo come tutti gli altri eseguibili su linux.
In questo modo otterrai un eseguibile ed in caso una libreria .so.
Anche con java-gnome c'è l'opzione di compilare tutto con gcj, senza nessuna jdk della Sun o altre jdk proprietarie.
Puoi compilare un binario da un sorgente java con:
gcj -fPIC -fjni -g -O -o nomedelleseguibile --main=NomeDellaClasseColMain \
Sorgenti.java -lLibreria -lLibreria
pieggi
12th July 2004, 13:32
Innanzitutto grazie per la risposta :clap:
Piedamaro, se non ho capito male te mi suggerisci di creare codice compilato su una sola piattaforma alla volta (quindi i binari vanno resi disponibili per tutte le piattaforme).
Il motivo per cui ho scelto java è proprio il fatto di poter usare un jar e non dovermi preoccupare se chi lo scarica ha windows (per cui cmq prevedo di fare un exe che lancia il jar per i niubbi :P )
Altrimenti, e la cosa mi verrebbe anche più semplice, scrivo con visual studio .net e poi compilo sulle varie piattaforme (ma chi mi compila i sources per il mac? e quelle per le piattaforme non-x86 in generale?)
E sarei da capo.. :unsure:
Oddio, il 99% dei pc è composto da win-mac-linux, per cui rendere disponibile il compilato per queste 3 (per i niubbi, tanto i sources ci sarebbero cmq) è cmq coprire tutti, però allora tanto vale usare .net.. :)
SunBeam
12th July 2004, 15:01
Compila in maniera nativa su ogni piattaforma, un eseguibile java. (su linux con gcj, su windows non so, crei un exe come dici tu.)
Su linux basta usare il comando:
setarch
e puoi compilare cross-platform, figo eh?
Es.
setarch ppc32 gcc programma.c -o programma
Così facendo compilo per architettura powerpc.
:D
pieggi
12th July 2004, 15:17
Anche in MONO funziona uguale?
Posso compilare con mono (su linux, su win uso vs) anche per altre piattaforme allo stesso modo?
:bava:
Satrax
12th July 2004, 15:23
Non ho capito bene cosa vuoi fare...
cmq se vuoi far sì che applicazioni distribuite comunichino e collaborino fra loro tramite chiamate a metodi remoti ti consiglio di utilizzare CORBA (Common Object Request Broker Architecture)
I punti di forza di CORBA sono:
- interazione semplice e trasparente di oggetti scritti in diversi linguaggi di programmazione; non e' importante conoscere la loro implementazione, quanto le loro interfacce
- gestione automatica di attivita' complesse come il bilanciamento del carico di lavoro di un programma su piu' macchine (load-balancing), controllo dei malfunzionamenti e delle transizioni
pieggi
12th July 2004, 15:34
no satrax, non mi ero spiegato bene, ma non devo fare applicazioni distribuite
Devo semplicemente includere del codice C/C++ in un progetto in java.
Visto che è possibile farlo, non mi metto certo a convertire il codice C/C++ in java :)
SunBeam
12th July 2004, 15:41
No, con mono, non devi fare nulla: copi l'eseguibile da un piattaforma all'altra e...funziona!!
Guarda qui: http://www.linuxjournal.com/article.php?sid=7430
E' sempre una VM alla fine...
pieggi
12th July 2004, 16:39
Originally posted by piedamaro@Jul 12 2004, 16:41 PM
No, con mono, non devi fare nulla: copi l'eseguibile da un piattaforma all'altra e...funziona!!
Guarda qui: http://www.linuxjournal.com/article.php?sid=7430
E' sempre una VM alla fine...
Ma quindi serve il framework di mono per funzionare
Se uno su win ha quello .net (di framework), non può funzionare, deve avere anche quello di mono?
SunBeam
12th July 2004, 17:23
M$ .NET non mi sembra proprio che sia multipiattaforma :D
"Mono is a work-in-progress, and many parts of the .NET class library have yet to be implemented, specifically the Windows.Forms group that contains classes for working with the Windows GUI. However, the Mono developers have released bindings for the GTK user-interface toolkit, so cross-platform graphical applications can be constructed even without 100% .NET compatibility. This article describes how to use C#, Mono and Linux to write a useful program, MonoBlog, that can run on any system that runs Mono and GTK."
"Now, having developed the program on Linux, we can run the program on Windows or Mac OS X with a minimum of fuss. Simply copy monoblog.exe, monoblog.exe.config and monoblog.glade files to the other platform and run them using the Mono CLR, as shown above.
Figures 3, 4 and 5 show MonoBlog running on Linux, Windows and Mac OS X machines, respectively. No code has to be changed; the program works as is, as long as all the libraries MonoBlog uses are present."
Morale: per sviluppare applicazioni .net multipiattaforma devi usare mono e gtk. Quando saranno implementate le win.forms potrai usare solo mono.
Puoi sviluppare su linux o su osx con monodevelop, e su windows con sharpdevelop, la cosa importante è che devi sviluppare 1 volta sola.
Attualmente mono è l' unica soluzione per sviluppare applicazioni .net cross platform, AFAIK :D
pieggi
12th July 2004, 17:32
Originally posted by piedamaro@Jul 12 2004, 18:23 PM
M$ .NET non mi sembra proprio che sia multipiattaforma :D
Piedamaro, io parlavo di win! :lol:
Riscrivo:
uno (un'utente qualsiasi) ha windows e ha il framework .net già installato
Io gli dò il programma compilato con mono
Gli funziona?
O deve installare anche il framework di mono?
Per le altre piattaforme ho capito :D
SunBeam
12th July 2004, 17:35
Ops, postato insieme :D
Funziona se non usi le winform, vedi sopra.
Se vuoi la gui devi usare gtk, o aspettare che implementino winforms, o meglio ancora contribuire ad implementarle!!
Viceversa, se sviluppi su windows con VS, hai lapossibiltà di far girare il programma con mono e wine su linux. (:()
vBulletin® v3.7.0, Copyright ©2000-2009, Jelsoft Enterprises Ltd.