Czy potrafisz skompilować Javę bezpośrednio do kodu maszynowego?
Chcę to zrobić, więc mam kontrolę nad platformami, na których jest używany, i nie znam C, C ++ itp.
Wygląda na to, że kompilator GNU dla Java może konwertować kod źródłowy Java na kod bajtowy Java lub kod maszynowy. Może także konwertować istniejący kod bajtowy Java na kod maszynowy. Jednak ostatnie wiadomości pochodzą z 2009 roku, więc nie jestem pewien, czy jest aktualny i czy może obsłużyć najnowsze funkcje języka Java.
Nie całkiem bezpośrednio odpowiadając na PO, ale być może interesujący. Java może być uruchomiona w trzech trybach:
-Xint
flagą - Interpretowane - Tylko kod bajtowy-Xcomp
flagą - skompilowane - skompilowane maszynowoźródło
-Xcomp
ponieważ nie mogłem znaleźć tego w dokumentacji JDK 7 lub dokumentacji opcji HotSpot i nie jestem pewien, czy masz jakieś ukryte tajemnice list mailowych, o których my, zwykli śmiertelnicy, nie jesteśmy świadomi :-)javac
? czy przy użyciu -Xcomp domyślnie wyświetla pojedynczy plik binarny?Lepszym rozwiązaniem może być wykrycie systemu operacyjnego za pomocą System.getProperty („nazwa os”) . Pozwoliłoby to wybrać więcej niż jeden system operacyjny, ale wykluczyć inne.
źródło
java -Dos.name=MacOS
.Teraz jest: GraalVM pozwala na wcześniejsze skompilowanie programów w natywny plik wykonywalny. Spójrz na funkcję obrazu natywnego :
Podsumowanie
https://www.graalvm.org/docs/getting-started/#native-images
Dema: Natywne obrazy do szybszego uruchamiania
https://www.graalvm.org/docs/examples/native-list-dir/
Szczegółowo: „Kompilacja z wyprzedzeniem”
https://www.graalvm.org/docs/reference-manual/aot-compilation/
Powiązane pytanie: „Czy mogę skompilować Javę do kodu natywnego?” https://stackoverflow.com/questions/2991799/can-i-compile-java-to-native-code/50555050#50555050
PS GCJ nie jest już obsługiwany.
Źródło: „The Deletion of gcj” http://tromey.com/blog/?p=911
źródło