cómo construir GNU Classpath y JamVM
Pregunta
Estoy intentando compilar GNU Classpath 0.98 y JamVM 1.5.2.
Siguiendo el archivo Léame de JamVM, hice 'configurar;hacer;make install' en jamVM y funcionó.
Luego agregué jamvm y Sun javac a la ruta.
Luego con GNU Classpath hice esto:
./configure --enable-jni --disable-gtk-peer --disable-gconf-peer --disable-plugin
Recibí este error:
El javac falló (ver config.log)
Sobre el config.log
, Veo que Javac no puede encontrar vmstackwalker (que es específico de JAMVM) Agregué las clases JAMVM al classpath, luego obtuve este error:
El jamvm de Java VM falló (consulte config.log)
Sobre el config.log
, veo que jamvm no puede encontrar java.lang.Class
.
¡¿Qué ocurre?!
Solución
Otros consejos
Pasos para la compilación de GNU Classpath para Ubuntu12.04: https://groups.google.com/forum/#!topic/ jruby-GSoC / -fnKnP7zxbI
Pasos para compilar JamVM para Ubuntu 12.04: https://groups.google.com/forum/#!topic / jruby-GSoC / uJ6RlVvHR-0
ecj tratar, la ruta de clase necesita un compilador Java y SDK sol parece haber ninguna buena aquí
Mis aventuras con Mac OS X 10.11:
JamVM
construido con make clean && CFLAGS="-m32" ./configure
.
Ruta de clases GNU
tomó un poco más:
# If you already made an attempt
make clean
## If you don't --disable-tools. I didn't have antlr, so I downloaded it.
#curl -O http://www.antlr.org/download/antlr-4.5.1-complete.jar
./configure --disable-gtk-peer --disable-gconf-peer \
--disable-tools # for tools: --with-antlr-jar=antlr-4.5.1-complete.jar
Si usted make
ahora, la compilación falla conjava_io_VMConsole.c:80:19: error: use of undeclared identifier 'IUCLC'
.he finalizado googleando cual es ese símbolo - es un 01000 octal y lo agregó directamente a la fuente:
vim ./native/jni/java-io/java_io_VMConsole.c
# add this line in the beginning of the file: #define IUCLC 0001000
Después de eso, ./configure sigue quejándose de tu javac
no ser GCJ.Parece un error antiguo de GNU Classpath, encontré menciones de problemas similares.Como ves a continuación, ./configure
está roto y no funciona con ningún javac
otro que gcj
.
Terminé simplemente editando ./configure
:
- al principio agregué una línea
export JAVAC=$(which javac)
- Reemplacé la asignación condicional con
JAVAC_IS_GCJ=no
Ahora, ./configure
debería pasar, pero make
no.
Recogí todos los Makefiles
eso ./configure
generado para -fsource=
, y luego comentó las líneas con -fsource
(es una bandera específica de gcj) si hubiera líneas alternativas con -source
argumento, o simplemente reemplazado fsource
con source
.
Último paso, tuve que editar el nivel superior. Makefile
y eliminar $(EXAMPLESDIR)
de SUBDIRS = ...
línea: no se compiló con un error:
./gnu/classpath/examples/CORBA/NamingService/Demo.java:99: error:
package gnu.classpath.tools.tnameserv does not exist
gnu.classpath.tools.tnameserv.Main.main(args);"
¡Se construyó!
Recibí errores al ejecutarlo, pero esa es una historia totalmente diferente...
$ DYLD_FALLBACK_LIBRARY_PATH=/usr/local/classpath/lib/classpath \
/usr/local/jamvm/bin/jamvm -verbose:class -verbose:jni Test
...
Failed to open library /usr/local/classpath/lib/classpath/libjavanio:
dlopen(/usr/local/classpath/lib/classpath/libjavanio.so,
1): image not found]
...
Exception occurred while printing exception (java/lang/NoClassDefFoundError)...
Original exception was java/lang/UnsatisfiedLinkError
(Actualizaré la respuesta si logro ejecutarla)