Goel Pankaj Ответов: 1

Онлайн-Сайт Компилятора C/C++


привет
Мне нужно сделать сайт на C# , на котором я напишу свою программу в текстовой области и после нажатия на кнопку compile она выдаст вывод, есть ли в программе какие-либо ошибки или нет. Я закончил с проектированием, но я не знаю остального, например, какой компилятор использовать, как прикрепить его к веб-сайту и как получить вывод компилятора и показать его пользователю. Будет очень полезно, если вы просто дадите мне представление о том, как это будет сделано.

Есть много веб-сайтов, которые предоставляют онлайн-компиляцию, например compilr.com, codepad.com, ideone.com-да. Но я хочу знать, как они работают.

Спасибо

Sergey Alexandrovich Kryukov

Да, это вполне возможно. Если вы помечаете C#, вы можете использовать ASP.NET-да. Вам нужно будет разместить компилятор C/C++ на вашем сайте.

Единственная проблема: я не знаю, в чем твоя проблема? Решение довольно простое, но не простое. Пожалуйста, поймите, что вряд ли кто-то может быть заинтересован в том, чтобы сделать для вас целостное решение; так Какой же помощи вы ожидаете?
Есть сомнения?

--СА

Goel Pankaj

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

Sergey Alexandrovich Kryukov

Вы правы насчет временного файла-это неизбежно. Вы также должны подумать о нескольких пользователях, работающих параллельно с вашим сайтом. Вы должны сохранить уникальные расположения файлов и т. д. Что касается процесса компиляции, я думаю, что ответил-процесс.Начните с изменения направления потока. Все ваши файлы будут приходить в виде имен файлов, используемых в командной строке компилятора/компоновщика, которую вы передадите процессу.Start (или, скорее, ProcessStartInfo, см. справочную страницу MSDN по этому классу; см. Также мои прошлые решения, на которые я ссылался).

Вы также можете создать файл проекта или сделать файл динамически и поместить туда свои имена файлов; в этом случае утилита сборки будет использовать только этот единственный файл в качестве параметра. Я бы предпочел такой подход. Эта часть будет полностью зависеть от используемого компилятора. Во всяком случае, много работы, но она более или менее проста.

Удачи,
--СА

Goel Pankaj

Я создаю веб-сайт компилятора C/C++ и думаю использовать с ним TCC(Turbo C Compiler).

Philippe Mori

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

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

Я не вижу в этом смысла. Уже есть несколько сайтов, которые это делают. Кроме того, я думаю, что большинство веб-хостинг-провайдеров не позволят выполнить произвольное приложение на своем сервере (так как это явно было бы дырой в безопасности, если бы компилятор не выполнялся в изолированной среде).

Кроме того, может возникнуть некоторая проблема масштабирования, если несколько пользователей будут использовать сайт одновременно, поскольку компилятор не создан для такого использования.

И наконец, C++ - не самый лучший язык, если цель состоит в том, чтобы просто иметь несколько компиляторов. А также имеет смысл использовать такой старый компилятор (как TCC) практически для любых целей.

1 Ответов

Рейтинг:
6

Sergey Alexandrovich Kryukov

Может быть, очень общая идея может помочь?

Вы можете создать ASP.NET решение. Пользователь публикует код с помощью обычной веб-формы post. На стороне сервера вы можете сохранить пользовательские файлы и запустить с ними компилятор/компоновщик. С компилятором Microsoft было бы хорошо использовать MSBuild. Вы можете запустить инструменты сборки с помощью System.Diagnostics.Process.Start Вам также нужно будет перенаправить все выходные данные из инструментов сборки, включая сообщения об ошибках. Вы можете реализовать свой собственный поток(ы), используемый для повторного направления или повторного направления выходных данных в файл(ы).

Для получения более подробной информации о переориентации используйте мои прошлые решения:
Как читать из командной строки[^],
Как читать консольный вывод с буфером (каналом)[^].

В своем веб-ответе на сообщение пользователя вы должны представить пользователю результат компиляции. Если вам нужно ответить двоичными результатами успешной компиляции, я предлагаю вам заархивировать данные и представить веб-ссылку (href) на заархивированный файл. Например, посмотрите на этот пример: http://forums.asp.net/p/1086292/3185254.aspx/1?Re+How+to+compress+multiple+files+with+GZipStream+and+C+[^].

Чтобы использовать это решение, вы должны узнать много нового. ASP.NET-да. Вы могли бы начать здесь: http://www.asp.net/[^].

Оговорка: Я не знаю юридических последствий использования коммерчески лицензированного компилятора или другого инструмента сборки для этой цели. Вам нужно разобраться в этом вопросе самостоятельно.

Удачи,

—СА


Goel Pankaj

спасибо, что ответили мне такой хорошей информацией. Я думаю, что мне нужно узнать больше о библиотеке C3. Я над этим поработаю. Спасибо

Sergey Alexandrovich Kryukov

Всегда пожалуйста.
Удачи, звоните еще раз.
--СА