Это команда aarch64-linux-gnu-gcj, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
gcj - опережающий компилятор для языка Java
СИНТАКСИС
ГКЖ [-Iдиректория...] [-d директория...]
[- ЗАКРЫТЬ=путь] [--classpath=путь]
[-fвариант...] [- кодирование=имя]
[--основной=имя_класса] [-Dимя[=ценностное ] ...]
[-C] [--ресурс имя ресурса] [-d каталог]
[-Wпредупреждать...]
исходный файл...
ОПИСАНИЕ
As GCJ это просто еще один интерфейс к GCC, он поддерживает многие из тех же параметров, что и gcc.
В этом руководстве описаны только параметры, относящиеся к GCJ.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
вход и выходной файлов
A GCJ команда похожа на GCC команда, состоящая из нескольких параметров и файла
имена. Поддерживаются следующие типы имен входных файлов:
файл.Ява
Исходные файлы Java.
файл.учебный класс
Файлы байт-кода Java.
файл.zip
файл.jar
Архив, содержащий один или несколько файлов ".class", все из которых скомпилированы. В
архив может быть сжат. Файлы в архиве, не заканчивающиеся на .учебный класс
обрабатываются как файлы ресурсов; они компилируются в результирующий объектный файл как ядро:
URL-адрес.
@файл
Файл, содержащий список имен входных файлов, разделенных пробелами. (В настоящее время эти
все должны быть исходными файлами ".java", но это может измениться.) Каждый именованный файл компилируется,
так же, как если бы это было в командной строке.
библиотека.a
библиотека.так
-lимя библиотеки
Библиотеки для использования при связывании. Увидеть GCC руководство.
Вы можете указать более одного входного файла на GCJ командная строка, и в этом случае они будут
все будет скомпилировано. Если вы укажете "-o ИМЯ ФАЙЛА" вариант, все входные файлы будут
скомпилированы вместе, создав один выходной файл с именем ИМЯ ФАЙЛА. Это разрешено даже
при использовании «-S» или «-c», но не при использовании «-C» или «--resource». (Это расширение
за пределами того, что равнина GCC позволяет.) (Если указано более одного входного файла, все должны
в настоящее время это файлы ".java", хотя мы надеемся это исправить.)
вход Опции
GCJ имеет параметры для управления поиском нужных файлов. Например, GCJ может быть
необходимо загрузить класс, на который ссылается файл, который его попросили скомпилировать. Нравиться
другие компиляторы для языка Java, GCJ имеет представление о класс путь, Есть
несколько параметров и переменных среды, которые можно использовать для управления путем к классам.
После появления GCJ ищет данный класс, он ищет путь к классу в поисках соответствия .учебный класс
or .Ява . GCJ поставляется со встроенным путем к классам, который указывает на установленный
libgcj.jar, файл, содержащий все стандартные классы.
В приведенном ниже тексте компонент каталога или пути может относиться к фактическому каталогу.
в файловой системе или в .zip or .jar файл, который GCJ будет искать, как будто это
каталог.
-Iдиректория
Все каталоги, указанные с помощью "-I", сохраняются в порядке и добавляются к пути к классу.
построен из всех остальных вариантов. Разве что совместимость с инструментами типа "javac"
важно, мы рекомендуем всегда использовать "-I" вместо других параметров для
манипулирование путем к классам.
--classpath =путь
Это устанавливает путь класса к путь, список путей, разделенных двоеточиями (в Windows
систем, список путей, разделенных точкой с запятой). Это не отменяет встроенный
("boot") путь поиска.
--CLASSPATH =путь
Устарел синоним "--classpath".
--bootclasspath =путь
Где найти стандартные встроенные классы, такие как "java.lang.String".
--extdirs =путь
Для каждого каталога в путьпоместите содержимое этого каталога в конец
путь к классу.
CLASSPATH
Это переменная среды, которая содержит список путей.
Окончательный путь к классам строится так:
* Сначала идут все каталоги, указанные через "-I".
* Если --classpath указано, его значение добавляется. В противном случае, если "КЛАСС"
указывается переменная среды, затем добавляется ее значение. В противном случае текущий
каталог (".") добавляется.
* Если был указан "--bootclasspath", добавьте его значение. В противном случае добавьте встроенный
системный каталог, libgcj.jar.
* Наконец, если был указан "--extdirs", добавить содержимое указанного
каталоги в конце пути к классам. В противном случае добавьте содержимое
встроенные extdirs в "$ (prefix) / share / java / ext".
Файл класса, созданный GCJ для класса "java.lang.Object" (и помещается в "libgcj.jar")
содержит специальный атрибут нулевой длины "gnu.gcj.gcj-compiled". Компилятор ищет
этот атрибут при загрузке "java.lang.Object" и сообщит об ошибке, если он не найден,
если он не компилируется в байт-код (опция "-fforce-classes-archive-check" может использоваться для
переопределить это поведение в данном конкретном случае.)
-Force-классы-архив-проверка
Это заставляет компилятор всегда проверять наличие специального атрибута нулевой длины.
"gnu.gcj.gcj-compiled" в "java.lang.Object" и выдает ошибку, если он не найден.
-fsource =Версия
Эта опция используется для выбора исходной версии, принятой GCJ, По умолчанию 1.5.
Кодировки
Язык программирования Java повсюду использует Unicode. В стремлении хорошо интегрироваться
с другими регионами, GCJ позволяет .Ява файлы должны быть записаны с использованием практически любой кодировки. GCJ
знает, как преобразовать эти кодировки во внутреннюю кодировку во время компиляции.
Вы можете использовать "--encoding =ИМЯ" возможность указать кодировку (конкретного символа
set) для использования в исходных файлах. Если это не указано, кодировка по умолчанию берется из
ваш текущий регион. Если ваша хост-система не имеет достаточной поддержки локали, тогда GCJ
предполагает, что кодировка по умолчанию является UTF-8 кодировка Unicode.
Чтобы реализовать "--encoding", GCJ просто использует процедуру преобразования "iconv" хост-платформы.
Это означает, что на практике GCJ ограничено возможностями хост-платформы.
Имена, разрешенные для аргумента "--encoding", варьируются от платформы к платформе (поскольку они
нигде не стандартизированы). Тем не мение, GCJ реализует кодировку с именем UTF-8
внутренне, поэтому, если вы решите использовать это для своих исходных файлов, вы можете быть уверены, что он
будет работать на каждом хосте.
Предупреждения
GCJ реализует несколько предупреждений. Как и в случае с другими универсальными GCC предупреждения, если опция
form «-Wfoo» включает предупреждение, затем «-Wno-foo» отключит его. Здесь мы выбрали
задокументируйте форму предупреждения, которое будет иметь эффект - по умолчанию
противоположное тому, что указано.
-Wredundant-модификаторы
С этим флагом GCJ предупредит об избыточных модификаторах. Например, он предупредит
если метод интерфейса объявлен "общедоступным".
-Wextraneous-точка с запятой
Это вызывает GCJ предупреждать о пустых заявлениях. Пустые заявления были
устарело.
-Wno-устаревший
Этот вариант вызовет GCJ не предупреждать, если исходный файл новее, чем соответствующий
файл класса. По умолчанию GCJ предупредит об этом.
-Wno-не рекомендуется
Предупреждать, если упоминается устаревший класс, метод или поле.
-Wunused
Это то же самое, что и GCC"-Wunused".
-Стена
Это то же самое, что и «-Wredundant-modifiers -Wextraneous-точка с запятой -Wunused».
Связывающий
Чтобы превратить Java-приложение в исполняемую программу, вам необходимо связать его с необходимым
библиотеки, как для C или C ++. Компоновщик по умолчанию ищет глобальную функцию с именем
"главный". Поскольку в Java нет глобальных функций, и набор классов Java может
иметь более одного класса с "основным" методом, вам необходимо сообщить компоновщику, какой из
те «основные» методы, которые он должен вызывать при запуске приложения. Вы можете сделать это в
любым из этих способов:
* Укажите класс, содержащий желаемый "основной" метод, при связывании приложения,
используя флаг "--main", описанный ниже.
* Свяжите пакеты Java с общей библиотекой (dll), а не с исполняемым файлом. потом
вызвать приложение с помощью программы "gij", убедившись, что "gij" может найти
библиотеки, которые ему нужны.
* Свяжите пакеты Java с флагом "-lgij", который ссылается на "главную" процедуру
из команды "gij". Это позволяет вам выбрать класс, чей «основной» метод вы
хотите запускать при запуске приложения. Вы также можете использовать другие флаги "gij", например
«-D» флаги для установки свойств. Использование библиотеки «-lgij» (а не «gij»
программа предыдущего механизма) имеет ряд преимуществ: она совместима со статическим
связывание и не требует настройки или установки библиотек.
Эти параметры «gij» относятся к связыванию исполняемого файла:
--main =НАЗВАНИЕ КЛАССА
Эта опция используется при связывании для указания имени класса, чей «основной» метод
должен вызываться при запуске результирующего исполняемого файла.
-Dимя[=ценностное ]
Этот параметр можно использовать только с "--main". Он определяет системное свойство с именем имя
со значением ценностное . Если ценностное не указан, то по умолчанию используется пустая строка.
Эти системные свойства инициализируются при запуске программы и могут быть получены.
во время выполнения с помощью метода «java.lang.System.getProperty».
-lgij
Создайте приложение, в командной строке которого обрабатывается команда "gij".
Эта опция является альтернативой использованию "--main"; вы не можете использовать оба.
-статический-libgcj
Эта опция заставляет связываться со статической версией среды выполнения libgcj.
библиотека. Этот параметр доступен только в том случае, если существует поддержка соответствующего компоновщика.
Внимание: Статическая компоновка libgcj может привести к тому, что важные части libgcj будут опущены.
Некоторые части libgcj используют отражение для загрузки классов во время выполнения. Поскольку компоновщик делает
не видеть эти ссылки во время ссылки, он может опустить упомянутые классы. В
результатом обычно (но не всегда) является исключение ClassNotFoundException во время выполнения.
При использовании этой опции необходимо соблюдать осторожность. Подробнее см .:
<http://gcc.gnu.org/wiki/Statically% 20ссылка% 20libgcj>
Code Поколение
В дополнение ко многим GCC опции управления генерацией кода, GCJ есть несколько вариантов
специфический для себя.
-C Эта опция используется, чтобы сообщить GCJ для генерации байт-кода (.учебный класс файлы), а не объект
код.
--ресурс имя ресурса
Эта опция используется, чтобы сообщить GCJ для компиляции содержимого данного файла в объектный код
поэтому к нему можно получить доступ во время выполнения с помощью основного обработчика протокола как основной:/ресурс-
имя, Обратите внимание, что имя ресурса имя ресурса, найденное во время выполнения; для
Например, его можно использовать при вызове ResourceBundle.getBundle. Фактический файл
имя, которое будет скомпилировано таким образом, необходимо указывать отдельно.
-ftarget =Версия
Это можно использовать с -C выбрать версию байт-кода, испускаемого GCJ,
по умолчанию 1.5. Если байт-код не генерируется, эта опция не действует.
-d каталог
При использовании с "-C" все сгенерированные .учебный класс файлы должны быть помещены в
соответствующий подкаталог каталог. По умолчанию они будут помещены в подкаталоги
текущего рабочего каталога.
-fno-bounds-проверка
По умолчанию GCJ генерирует код, который проверяет границы индексации всех массивов
операции. При использовании этого параметра эти проверки не выполняются, что может повысить производительность.
для кода, широко использующего массивы. Обратите внимание, что это может привести к непредсказуемым
поведение, если рассматриваемый код действительно нарушает ограничения границ массива. Это
безопасно использовать эту опцию, если вы уверены, что ваш код никогда не выдаст
«ArrayIndexOutOfBoundsException».
-fno-магазин-проверить
Не генерировать проверки хранилища массивов. При хранении объектов в массивах проверка во время выполнения
обычно генерируется, чтобы гарантировать, что назначение объекта совместимо с
тип компонента массива (который может быть неизвестен во время компиляции). С этим
вариант, эти проверки опускаются. Это может улучшить производительность кода, который хранит
объекты в массивы часто. Вы можете безопасно использовать эту опцию, если уверены, что
код никогда не вызовет исключение ArrayStoreException.
-фджни
В GCJ есть два варианта написания собственных методов: CNI и JNI. По умолчанию
GCJ предполагает, что вы используете CNI. Если вы компилируете класс с помощью собственных методов, и
эти методы реализованы с использованием JNI, тогда вы должны использовать "-fjni". Этот вариант
Причины GCJ для создания заглушек, которые будут вызывать базовые методы JNI.
-fno-утвердить
Не узнавайте ключевое слово assert. Это для совместимости со старыми версиями
спецификации языка.
-fno-оптимизировать-статическую-инициализацию-класса
Когда уровень оптимизации больше или равен «-O2», GCJ постараюсь оптимизировать
вызовы в среду выполнения выполняются для инициализации статических классов при их первом использовании
(эта оптимизация не выполняется, если был указан "-C".) При компиляции в родной
код, "-fno-optimize-static-class-initialization" отключит эту оптимизацию,
независимо от используемого уровня оптимизации.
--disable-assertions [=класс или пакет]
Не включайте код для проверки утверждений в скомпилированный код. Если
"=класс или пакет " отсутствует - отключает создание кода утверждения для всех классов,
если не переопределен более конкретным флагом "--enable-assertions". Если класс или пакет
является именем класса, отключает создание проверок утверждений только в названном классе или
его внутренние классы. Если класс или пакет это имя пакета, отключает создание
проверка утверждения в названном пакете или подпакете.
По умолчанию утверждения включены при создании файлов классов или при отсутствии оптимизации.
и отключен при создании оптимизированных двоичных файлов.
--enable-assertions [=класс или пакет]
Создает код для проверки утверждений. Возможно, этот вариант неправильно назван, так как вам все еще нужно
чтобы включить проверку утверждений во время выполнения, и мы не поддерживаем простой способ сделать
что. Так что этот флаг пока не очень полезен, за исключением частичного переопределения
"--disable-assertions".
-findirect-отправка
GCJ имеет специальную двоичную совместимость ABI, которая включается
опция "-findirect-dispatch". В этом режиме код, сгенерированный GCJ чтит
гарантии двоичной совместимости в Спецификации языка Java, и в результате
объектные файлы не нужно напрямую связывать с их зависимостями. Вместо,
все зависимости просматриваются во время выполнения. Это позволяет свободно смешивать интерпретируемые и
скомпилированный код.
Обратите внимание, что в настоящее время "-findirect-dispatch" можно использовать только при компиляции .учебный класс
файлы. При компиляции из исходников это не сработает. CNI тоже пока не работает с
двоичная совместимость ABI. Эти ограничения будут сняты в будущем.
отпустить.
Однако, если вы скомпилируете код CNI со стандартным ABI, вы можете вызвать его из кода
построен с использованием двоичной совместимости ABI.
-fbootstrap-классы
Эту опцию можно использовать, чтобы сообщить libgcj, что скомпилированные классы должны быть загружены
загрузчик начальной загрузки, а не загрузчик системного класса. По умолчанию, если вы компилируете класс
и связать его с исполняемым файлом, он будет обработан так, как если бы он был загружен с помощью
загрузчик системных классов. Это удобно, так как это означает, что такие вещи, как
"Class.forName ()" будет искать CLASSPATH найти желаемый класс.
-сведенное-отражение
Эта опция вызывает код, сгенерированный GCJ содержать уменьшенное количество класса
метаданные, используемые для поддержки отражения во время выполнения. Стоимость этой экономии - потеря
возможность использовать определенные возможности отражения стандартной среды выполнения Java
среда. При установке всех метаданных, кроме тех, которые необходимы для получения правильных
семантика времени выполнения устранена.
Для кода, который не использует отражение (например, сериализацию, RMI, CORBA или методы вызова
в пакете "java.lang.reflect") "-freduced-Reflection" приведет к правильному
работа с экономией размера исполняемого кода.
JNI ("-fjni") и ABI двоичной совместимости ("-findirect-dispatch") не работают
правильно без полного отражения метаданных. Из-за этого использование
эти параметры с "-freduced-Reflection".
Внимание: Если метаданные отражения отсутствуют, код, использующий SecurityManager, может
не работает должным образом. Также вызов "Class.forName ()" может завершиться ошибкой, если вызывающий метод имеет
нет метаданных отражения.
Настроить время Опции
Некоторые GCJ параметры генерации кода влияют на результирующий ABI, и поэтому могут быть только
значимо задается, когда сконфигурирован "libgcj", пакет времени выполнения. "libgcj" помещает
соответствующие варианты из этой группы в спецификация файл, который читает GCJ. Эти варианты
перечислены здесь для полноты; если вы используете libgcj, вы не захотите трогать
эти варианты.
-предохранитель-boehm-gc
Это позволяет использовать код маркировки растрового изображения Boehm GC. В частности, это вызывает
GCJ чтобы поместить дескриптор маркировки объекта в каждую виртуальную таблицу.
-fhash-синхронизация
По умолчанию данные синхронизации (данные, используемые для «синхронизировать», «ждать» и
"уведомить") указывается словом в каждом объекте. С этой опцией GCJ предполагает, что
эта информация хранится в хеш-таблице, а не в самом объекте.
-fuse-div-подпрограмма
В некоторых системах для выполнения целочисленного деления вызывается библиотечная процедура. Это
требуется для правильной обработки исключений при делении на ноль.
-fcheck-ссылки
В некоторых системах необходимо вставлять встроенные проверки при доступе к объекту.
по ссылке. В других системах вам это не понадобится, потому что доступ к нулевому указателю
автоматически перехватываются процессором.
-fuse-атомные-встроенные
В некоторых системах GCC может генерировать код для встроенных атомарных операций. Использовать этот
опция, чтобы заставить gcj использовать эти встроенные функции при компиляции кода Java. Где это
возможность присутствует, она должна быть обнаружена автоматически, поэтому обычно вам не понадобится
использовать эту опцию.
Используйте aarch64-linux-gnu-gcj в Интернете с помощью сервисов onworks.net