Как запустить программу из нескольких скомпилированных файлов из консоли

Содержание

Это далеко не все пробемы, которые могут возникнуть при наличии программы «монстра». Поэтому при разработке программ рекомендуется их разбивать на куски, которые функционально ограничены и закончены. В этом значительно помогает сам язык C++, предоставляя свой богатый синтаксис.

Для того, чтобы вынести функцию или переменную в отдельный файл надо перед ней поставить зарезервированное слово extern. Давайте для примера создадим программу из нескольких файлов. Сначала создадим главную программу, в которой будут две внешние процедуры. Назовем этот файл main.c:

Теперь создаем два файла, каждый из которых будет содержать полное определение внешней функции из главной программы. Файлы назовем f1.c и f2.c:

После этого процесс компиляции программы с помощью gcc будет выглядеть несколько иначе от описанного в «Шаг 1 — Компиляция программ на языке C/C++».

Компилировать можно все файлы одновременно одной командой, перечисляя составные файлы через пробел после ключа -c:

Python в EXE

Или каждый файл в отдельности:

В результате работы компилятора мы получим три отдельных объектных файла:

Чтобы их собрать в один файл с помощью gcc надо использовать ключ -o, при этом линкер соберет все файлы в один:

В результате вызова полученной программы rezult командой:

На экране появится результат работы:

Теперь, если мы изменим какую-то из процедур, например f1():

То компилировать заново все файлы не придется, а понадобится лишь скомпилировать измененный файл и собрать результирующий файл из кусков:

Таким образом можно создавать большие проекты, которые больше не будут отнимать много времени на компиляцию и поиск ошибок. Однако помните, не стоит также черезчур разбивать программу, иначе у Вас получится несколько десятков файлов, в которых Вы сами рано или поздно запутаетесь. Найдите «золотую середину», например в отдельные файлы помещайте те функции или классы, с которыми Вам приходится больше всего работать при отладке. После того, как функция будет окончательно отлажена, ее вполне можно перенести в более крупный файл.

Компиляция в Java - 1

Программирование в IDE — прекрасно: связанность зависимостей кода, удобный дебаг, понятное тестирование, темная тема. Так вот, благодаря IDE разработка развивается семимильными шагами. Но она расслабляет. С каждым днем, погружаясь в функционал IDE, разработчик привыкает к коммиту одной кнопкой или сборке двумя кликами.

Гораздо хуже обстоит ситуация с новичками в программировании, которые с самого начала работают в IDE, игнорируя работу в командной строке. Например, в Intellij IDEA компиляция Java приложения демонстрируется загрузочным баром в нижней панели, а все параметры компиляции, обработка classpath и прочих прелестей Java-жизни остается за кадром. Предлагаем поговорить о компиляции в Java без IDE. Для запуска примеров в статье следует убедиться, что на вашей машине установлена JDK 1.7 и старше.

Как компилировать C/C++ в Visual Studio Code на Windows?

Как скомпилировать программу?

  1. Есть исходный код в файле с именем НазваниеКласса.java;
  2. Если в коде нет ошибок, он компилируется в байт-код (в файл НазваниеКласса.class);
  3. Программа запускается.

Для чего нужна команда javac

Компиляция в Java - 2

Окей, первый пункт выполнен. Идем дальше, чтобы понять: скомпилировать — это как? 🙂 В этом нам поможет команда javac, в аргументе которой необходимо указать нужный файл: Если нет ошибок в коде, рядом с файлом Test.java появится файл Test.class. Это и есть скомпилированный байт-код. Теперь его нужно запустить.

Здесь используется команда java, запускающая байт-код: На скриншоте видно, что в выводе получаем какие-то иероглифы: очевидно, это сбитая кодировка. Как правило это происходит в системе Windows. Для корректного отображения кириллицы в консоли, есть следующие команды: Они меняют текущую кодовую страницу командной консоли на время работы текущего окна. Попробуем еще раз: Это говорит приложение из командной строки. Знать принцип работы команды javac очень полезно, так как эта команда лежит в основе любой системы сборки проектов.

Компиляция и выполнение нескольких классов

Для работы с несколькими классами нужен classpath. Он похож на файловую систему, в которой содержатся классы, а функцию папок выполняют пакеты (packages). На этом этапе стоит задуматься об отделении файлов исходного кода от скомпилированных файлов. Как правило исходники находятся в каталоге src, а скомпилированные классы — в bin.

Например, у нас есть класс Box и класс BoxMachine , в котором содержится метод main . Класс Box : Он находится в пакете src, это необходимо зафиксировать. Класс BoxMachine : Этот класс также находится в пакете src. В методе main он создает пять объектов класса Box разного размера и выводит в консоль информацию о них.

Читайте также:
Все программы открываются через медиа центр

Чтобы скомпилировать эту группу классов, необходимо из главного каталога (в котором лежат папки src и bin) использовать команду javac с аргументами: -d — флаг, после которого следует указать расположение, куда попадут скомпилированные классы. Это очень удобно, так как перекладывать, например, 1000 классов — очень трудоемкий процесс. bin — название папки. ./src/* — расположение исходных файлов. * указывает, что необходимо скомпилировать все файлы.

Теперь скомпилированные классы появились в папке bin. Для их запуска используется команда java из той же директории, также с аргументами: -classpath — флаг, после которого следует указать местоположение скомпилированных классов. Java будет искать главный класс и все сопутствующие именно в этой директории. ./bin — название папки, в которой находятся скомпилированные классы. BoxMachine — название главного класса. Как и в первом случае, не следует указывать .class , так как это название класса, а не файла. Вывод:

Создание JAR-файлов

Чтобы программу было легко переносить и запускать, можно собрать скомпилированные классы в jar-файл — архив классов. Главное отличие от zip или rar-архивов — наличие файла манифеста. В этом манифесте указывается главный класс, который будет запускаться при выполнении jar-файла, classpath, а также много дополнительной информации. В главном каталоге создадим файл manifest.mf.

Его содержимое будет следующим: main-class указывает класс, который содержит метод main и будет выполнен при запуске. class-path — путь к скомпилированным классам или дополнительным библиотекам. Настало время собрать настоящую программу без IDE с помощью команды jar: -cmf — флаг, после которого следует указать путь к файлу манифеста. manifest.mf — путь к манифесту. box-machine.jar — название выходного jar-файла. -С — флаг, после которого указывается путь к скомпилированным классам. . — путь, куда будет помещен jar-файл. В нашем случае —это главный каталог. Теперь можно запустить. Запуск jar-файлов выполняется также с помощью команды java, но следом нужно указать флаг -jar : он говорит о том, что запускается Jar-файл, а второй аргумент — путь к jar -файлу, включая расширение: Вывод:

Компиляция в Java без IDE: обзор систем сборок

Несмотря на относительную простоту использования командной строки, с ее помощью очень сложно собирать средние и большие проекты. Это занимает много времени и чревато ошибками разной степени. К счастью, есть системы сборки, которые в разы облегчают процесс работы. Несколькими командами эта система может собрать проект любой сложности, а обилие плагинов, созданных за время существования таких систем, может избавить практически от любой головной боли.

Как скомпилировать Java?

Самые известные системы сборки на Java — это Ant, Maven и Gradle. Среди нет плохой или хорошей: каждая из них создана для решения определенных задач. Рассмотрим каждую из них подробнее.

  • mkdir — создание директорий
  • delete — удаление файлов и директорий
  • javac — компиляция Java–кода
  • java — запуск скомпилированного кода

Maven

Компиляция в Java - 3

Maven предлагает несколько другой подход к сборке проектов. Здесь разработчик скорее описывает свой проект и дополнительные инструменты, которые использует, в отличие от Ant, где сборка — это последовательность действий. Maven популярен среди разработчиков благодаря простому управлению зависимостями и удобной интеграции со всеми средами разработки.

При работе с Maven придерживаются такой структуры проекта: Правила сборки, зависимости и прочее описывается в файле pom.xml. Как правило он находится в главной папке проекта. При запуске Maven проверяет структуру и синтаксис файла, предупреждая об ошибках.

В главной директории рядом с папками bin и src создаем файл pom.xml, внутрь добавляем: Далее в командной строке выполняем команду mvn: Теперь в папке bin есть папка src, в которой находятся скомпилированные классы. В pom.xml в теге build определена цель сборки — компиляция, директории файлов исходного кода и результата компиляции, а также имя проекта. У Maven есть множество целей сборки и плагинов для запуска тестирования, создания Jar-файлов, сборки дистрибутивов и других задач.

Gradle

Это самая молодая система сборки, которая основывается на Ant и Maven. Главное отличие — работа на базе ациклического графа для определения порядка выполнения задач. Это очень полезно при более сложных задачах, например, инкрементальных и многопроектных сборках. При сборке с помощью Gradle также рекомендуется придерживаться структуры папок проекта Maven.

Кстати, файл для сборки в Gradle он называется build.gradle и выглядит гораздо меньше, чем у Maven. Пример для наших классов: В файле происходит подключение плагинов, определение директории файлов исходного кода (если не используется структура проектов Maven), директория результатов сборки, имя главного класса, а также задачи по умолчанию. За запуск сборки отвечает команда gradle в директории, где лежит файл build.gradle:

Заключение

Компиляция в Java - 4

На первый взгляд, умение компиляции и сборки кода без IDE кажется бесполезным. Действительно, зачем мучиться с командными строками и гуглить все команды, когда есть уютная IDEшечка с плагинами, автопроверкой всего что можно (современные IDE разве что уровень IQ не проверяют) и интеграцией с популярными системами. Однако практика показывает, что умение собирать код без среды разработки и понимание каждого шага этого процесса — суровая необходимость. Этот навык сэкономит немало нервных клеток и времени вам и вашей компании. Освоить работу в IDE, попрактиковаться в написании кода и, конечно же, получить фундаментальные основы по программированию на Java вы можете здесь — на JavaRush. Пора вернуться к обучению 🙂

Читайте также:
Как делать анимации на ПК без программ

Привет, я использовал IDE, но теперь мне нужно запустить и скомпилировать из командной строки.

Проблема в том, что у меня несколько пакетов, и я пытался найти ответ, но ничего не помогло.

Вы знаете, как все скомпилировать с помощью javac?

Это должно сделать это (могут потребоваться дополнительные элементы пути к классам через переключатель командной строки -cp ):

Но если ваш процесс сборки станет более сложным (а так оно и будет!), Вам следует изучить возможность использования Apache Ant для сборки автоматизация.

Вам следует использовать такие инструменты сборки, как Maven или Ant для таких задач.

javac Support/*.java Me/*.java Wrapers/*.java

Если вам действительно нужно просто использовать javac и стандартные команды UNIX, вы можете сделать это:

Во многих случаях Ant бывает излишним. Просто используйте файл BAT, если вы работаете в Windows, или сценарий оболочки (файл sh), если вы работаете в Linux. Вы можете создать текстовый файл, содержащий все ваши команды javac, и просто запустить этот файл, когда захотите построить.

Например, я использую следующий файл bat для создания одного из своих приложений:

Чтобы скомпилировать команду Выполнить ниже [она сохранит все файлы классов в папке классов]

javac -d классы Поддержка / *. java Me / *. java Wrapers / *. java

** Примечание: сначала необходимо создать папку классов.

Чтобы запустить приложение Java, выполните команду ниже

Замените mainfile_name своим основным файлом.

Настоящий ответ — javac -d (места, где должны быть созданы и размещены классы) -sourcepath (источник пакета в корне) -cp (путь к классам зависимостей, который снова может быть папкой классов, в которой классы создаются и хранятся) full полное имя файла java.

Я компилирую несколько файлов в каталоге (javac *.java), но у меня есть проблема, когда я пытаюсь это сделать:

Я получаю ошибки компиляции, говоря, что javac не может найти символ объекта.

У меня есть несколько пакетов, содержащих java файлы, необходимые для запуска основной программы. Но похоже, что попытка скомпилировать их по одному не сработает. Он отлично работает в моей среде разработки, но мне интересно узнать, как это делается с помощью командной строки.

Основная программа находится в папке с драйверами.

this is a screenshot of the folders

Я попытался скомпилировать файлы в порядке зависимости, но это не сработало.

ОТВЕТЫ

Ответ 1

Javac документация содержит всю необходимую информацию. Однако было бы полезно использовать Ant или Maven для построения командной строки.

Эта страница служит хорошим примером использования первого javac, а затем Ant для создания простого проекта.

Вот пример проекта и как его можно скомпилировать с помощью javac.

Древовидная структура проекта такова:

Существует два специальных каталога — build для хранения скомпилированных классов и src для размещения исходных файлов (может быть в разных подкаталогах — пакетах).

Следующая команда компилирует весь проект и помещает результат в каталог build .

-sourcepath src указывает каталог src как место, где весь источник может быть найден компилятором. Опция -d build сообщает компилятору, куда поместить скомпилированные файлы.

Опция src/**/*.java сообщает компилятору, какие файлы нужно компилировать. В этом конкретном случае он сообщает javac посмотреть два уровня вниз и выбрать все *.java на этом уровне.

Если существуют файлы *.java на разных уровнях, необходимо указать список файлов. Для этого можно создать такой список как внешний файл и передать эти файлы, как в опции ввода для javac .

Вот как это можно сделать в Linux/Unix:

Вышеупомянутая команда создает файл source.txt, содержащий полные пути для найденных *.java файлов. В этом примере он содержит:

Чтобы скомпилировать проект со списком исходных файлов, сброшенных в source.txt , можно использовать следующую команду:

Вот как структура каталогов изменилась после выполнения указанной выше команды.

Как можно заметить, каталог build теперь содержит скомпилированные файлы классов в соответствующих пакетах.

И если вы хотите запустить его, предположив, например, что Driver имеет метод main , следующая программа выполняет программу.

Обратите внимание, что в Unix используется разделитель файлов : (двоеточие), для Windows его можно изменить на ; (точка с запятой).

Ответ 2

Я компилирую несколько файлов в каталоге (javac *.java)

Неправильно. Это будет работать только в том случае, если классы Java не находятся в пакетах. Правильный способ сделать это выглядит следующим образом, где src — это имя каталога, в котором находятся все каталоги пакетов:

и т.д. для любого вашего макета пакета/каталога. Каждая командная строка javac будет скомпилировать все файлы в названном каталоге и все .java файлы в других пакетах/каталогах, от которых он зависит, которые еще не скомпилированы или устарели.

См. документацию инструмента для javac .

Ответ 3

1) Используйте командную строку, чтобы указать все файлы для компиляции

  • Как удалить rimworld с компьютера
  • Как определить бездействие пользователя в 1с
  • Irbis sp493 как прошить
  • 0x8004060c outlook 2010 ошибка
  • Поле объекта не доступна для записи 1с
Читайте также:
Сделать скриншот страницы программа

Источник: kompyutery-programmy.ru

Русские Блоги

Скомпилируйте несколько файлов Java из командной строки

Как скомпилировать несколько файлов Java с помощью командной строки

Структура файла:

method 1

cd javaproject javac -sourcepath javapath -d classpath javapath/*.java cd classpath java a java b

method 2

cd javaproject/javapath javac -d ../classpath *.java cd ../classpath java a java b

Интеллектуальная рекомендация

Pytorch Multi -GPU Training Finger North

https://www.jianshu.com/p/bb28669018b3 Предисловие В возрасте все большего и большего количества данных, с увеличением параметров масштаба моделей и постоянного улучшения объема данных, неизбежно испо.

Сцена контекста Spring после инициализации

Недавно я столкнулся с проблемой. После расширения весеннего веб -потока нам необходимо выполнить некоторые начальные методы реализации инициализации для наших собственных бобов после инициализации ко.

Jq ajax одновременно отправлять форму и загрузить файл

Сетевое программирование на Java

TCP/IP Подробнее о TCP / IP Данные, передаваемые по TCP Интерактивный поток данных TCP Поток данных блока TCP TCP Demo UDP URL Для сетевого программирования слишком много вещей, подробнее добавлю в бу.

Пример использования DolphinDB: импорт текстовых файлов в базу данных

Эта статья вернаОфициальный учебникПовторение проблемы записывается с точки зрения новичков на пути к достижению цели. Получить USstocks.csv использованиеИсследовательский центр акций Чикагского униве.

Вам также может понравиться

Мышь OpenCasecade перемещается с высоким ярким цветом и выбранными настройками цвета

OpenCaseCade будет выделен при переходе от мыши к патчу. Когда выбрана диаграмма, будут изменения. Как изменить высокие яркие цвета и цвет при выборе? Эта проблема заключалась в том, что раньше сталки.

008 Строка строки в целое число (ATOI) конвертируется в Integer

Для получения подробной информации: https://leetcode.com/prblems/string-iteger-etoi/descripting/ Реализация языка: java Реализовать язык: C ++ Ссылка: http://www.cnblogs.com/grandyang/p/4125537.html П.

Установите TensorFlow под Windows

Я уже много раз пытался установить TensorFlow, но даже если он установлен, при запуске тестовой программы всегда будут появляться различные ошибки.После решения одной ошибки появится больше. Среди них.

В запуске файла JSP нет ошибок. Он заменяется файлом Java и работает, но появляется на JavaScript от Bootstrap, требуется jQuery по адресу bootstrap.js: 8

Вывод клиента консоли: Код: JavaScript от Bootstrap требует jQuery по адресу bootstrap.min.js: 6 обычно имеет проблему с порядком Bootstrap. Сначала вы должны процитировать файл jquery.min.js, а затем.

Я попробую изучить Python

Я попробую изучить Python Я смотрел Python почти месяц и все знал, когда смотрел его. Однако выключать видео — это глупо, и я ничего не знаю. С этого момента я должен писать программу во время просмот.

Источник: russianblogs.com

Как запустить программу из нескольких скомпилированных файлов из консоли

Это далеко не все пробемы, которые могут возникнуть при наличии программы «монстра». Поэтому при разработке программ рекомендуется их разбивать на куски, которые функционально ограничены и закончены. В этом значительно помогает сам язык C++, предоставляя свой богатый синтаксис.

Для того, чтобы вынести функцию или переменную в отдельный файл надо перед ней поставить зарезервированное слово extern. Давайте для примера создадим программу из нескольких файлов. Сначала создадим главную программу, в которой будут две внешние процедуры. Назовем этот файл main.c:

#include // описываем функцию f1() как внешнюю extern int f1(); // описываем функцию f2() как внешнюю extern int f2(); int main() int n1, n2; n1 = f1(); n2 = f2(); printf(«f1() = %dn»,n1); printf(«f2() = %dn»,n2); return 0; >

Теперь создаем два файла, каждый из которых будет содержать полное определение внешней функции из главной программы. Файлы назовем f1.c и f2.c:

// файл f1.c int f1() return 2; > // файл f2.c int f2() return 10; >

После этого процесс компиляции программы с помощью gcc будет выглядеть несколько иначе от описанного в «Шаг 1 — Компиляция программ на языке C/C++».

Компилировать можно все файлы одновременно одной командой, перечисляя составные файлы через пробел после ключа -c:

gcc -c main.c f1.c f2.c

Или каждый файл в отдельности:

gcc -c f1.c gcc -c f2.c gcc -c main.c

В результате работы компилятора мы получим три отдельных объектных файла:

main.o f1.o f2.o

Чтобы их собрать в один файл с помощью gcc надо использовать ключ -o, при этом линкер соберет все файлы в один:

gcc main.o f1.o f2.o -o rezult

В результате вызова полученной программы rezult командой:

./rezult

На экране появится результат работы:

dron:~# ./rezult f1() = 2 f2() = 10 dron:~#

Теперь, если мы изменим какую-то из процедур, например f1():

int f1() return 25; >

То компилировать заново все файлы не придется, а понадобится лишь скомпилировать измененный файл и собрать результирующий файл из кусков:

dron:~# gcc -c f1.c dron:~# gcc main.o f1.o f2.o -o rezult2 dron:~# ./rezult2 f1() = 25 f2() = 10 dron:~#

Таким образом можно создавать большие проекты, которые больше не будут отнимать много времени на компиляцию и поиск ошибок. Однако помните, не стоит также черезчур разбивать программу, иначе у Вас получится несколько десятков файлов, в которых Вы сами рано или поздно запутаетесь. Найдите «золотую середину», например в отдельные файлы помещайте те функции или классы, с которыми Вам приходится больше всего работать при отладке. После того, как функция будет окончательно отлажена, ее вполне можно перенести в более крупный файл.

Источник: firststeps.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru