Форум программистов, компьютерный форум, киберфорум
8Observer8
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Запуск программы на C++ в браузере с помощью Emscripten

Запись от 8Observer8 размещена 12.07.2024 в 17:23
Показов 1871 Комментарии 0
Метки c++

Содержание блога

Программы на C++ можно размещать на своём сайте для портфолио. Плюс запуска в браузере в том, что вам не нужно заботиться о сборке исполняемых файлов под различные операционные системы и платформы. Ваша программа запустится в один клик на любой ОС и даже на мобильном устройстве. EXE многие опасаются скачивать из-за возможных вирусов. Сложно и долго собирать исполняемые файлы для всех ОС при изменениях в приложениях. Эта инструкция для Windows, но она вполне подойдёт для Linux и MacOS с некоторыми поправками. Установим необходимые инструменты и запустим "Hello, Word!" в браузере на С++.

Установка Git

У вас должен быть установлен Git. Если у вас его нет, то скачайте и установите. Наберите в поисковике браузера: git download Скачать можно по ссылке: https://git-scm.com/downloads Git понадобится для установки emsdk, об это ниже.

Установка MinGW

Проверьте, установлен ли MinGW. Для этого введите в консоли: mingw32-make -v Должна быть выведена версия MinGW. Например, у меня выводится "GNU Make 4.2.1". Возможно у вас установлен Qt с MinGW. Например, у меня MinGW установлен вместе с Qt, поэтому я добавил следующий путь в переменную окружения Path: C:\Qt\Tools\mingw1120_64\bin Если MinGW у вас не установлен, то его можно поставить отдельно. Например, перейдите можете скачать эту версию: GCC 11.2.0 + MinGW-w64 10.0.0 Либо выберите другую по ссылке: https://winlibs.com/ Вы можете извлечь архив на диск C в папку mingw64. Добавьте этот путь в в переменную окружения Path: C:\mingw64\bin Для вызова диалогового окна Path можно скопировать и выполнить следующую команду в консоли: rundll32 sysdm.cpl,EditEnvironmentVariables Откройте новую консоль и проверьте, что работает команда вывода версии: mingw32-make -v

Установка emsdk

Для компиляции С++ в файлы браузера нужен Emscripten SDK (Software Development Kit)
  • Для скачивания Emscripten SDK перейдите в папку, куда вы хотите установить emsdk. Можно перейти в корень диска С и установить в папку emsdk. Для открытия консоли в Windows можно в адресной строке пути файла набрать cmd и нажать Enter
  • В CMD скопируйте следующую команду: git clone https://github.com/emscripten-core/emsdk.git и нажмите Enter. На диске C будет создана папка emsdk в которую будут скачены файлы emsdk
  • Перейдите в папку emsdk с помощью CMD, набрав: cd emsdk
  • Наберите следующую команду для установки специфичной версии: emsdk install 3.1.37 Эта версия работает с SDL3 и она рекомендована для Qt 6.6.3 Таблицу для Qt можно посмотреть здесь: https://doc.qt.io/qt-6/wasm.html В таблице можно увидеть, что для Qt 6.7 необходима версия emsdk 3.1.50 Я не пробовал Qt 6.7 и не пробовал emsdk 3.1.50 для SDL3
  • Наберите команду активации специфичной версии: emsdk activate 3.1.37

Установка Node.js и локального сервера http-server
  • Скачайте и установите Node.js: https://nodejs.org/en/download/prebuilt-installer
  • Откройте CMD в какой-либо папке - неважно и введите команду: npm i -g http-server Будет установлен инструмента для запуска локального сервера. Локальный сервер нужен для запуска приложений локально в браузере. Если вы попытаетесь запустить собранное веб-приложение в браузере двойным кликом по index.html, то оно не запустится

Компиляция и запуск "Hello, World" в браузере
  • Создайте папку, например, с именем "hello-world", где-нибудь на жёстком диске с файлом main.cpp для программы и скопируйте в него программу:
    C++
    1
    2
    3
    4
    5
    6
    7
    
    #include <iostream>
     
    int main()
    {
        std::cout << "Hello, World!" << std::endl;
        return 0;
    }
  • Рядом с файлом main.cpp создайте пустую папку с именем public
  • В папке с main.cpp откройте CMD, набрав, cmd в адресной строке папки и введите команду: emcc -g main.cpp -o public/index.html
  • В папке public будут созданы файлы необходимые для запуска в браузере: index.html, index.js и index.wasm
  • Папку public можно загрузить на бесплатный хостинг www.netlify.com с бесплатным доменом третьего уровня простым перетаскиванием мыши. Данный пример в браузере: https://hello-world-emscripten.netlify.app/
  • В папке, где находится main.cpp запустите команду в консоли: http-server -c-1 Ключ -c-1 нужен, чтобы браузер не кешировал файлы при обновлении страницы
  • Перейдите в браузер и наберите localhost:8080 Приложение будет запущено
  • Бывает, что ключ -c-1 не помогает и браузер всё равно кеширует файлы. Надёжнее перезапускать страницу в отладочном режиме браузера. Для этого перейдите в режим разработчика в браузере, для этого нажмите: Ctrl+Shift+J (в Chrome и Edge). Откроются инструменты разработчика. Слева от адресной строки вы видите круговую стрелку для перезагрузки страницы. Кликните правой кнопкой мыши по этой кнопке и выберите "Empty Cache and Hard Reload". Кеш страницы будет очищен и запустится текущая версия приложения

Бесплатные хостинги для размещения своих приложений
  • https://www.netlify.com/ - самый простой хостинг. Приложения не засыпают, как на Glitch и Render (о них ниже) Создавайте новое веб-приложение и перекидывайте мышкой папку public в него. Меняйте адрес приложения в настройкам. Будет такой домен третьего уровня: www.app-name.netlify.com
  • https://github.com/ Создайте репозиторий и именем вашего аккаунта и github.io, например: your-name.github.io Это будет вас сайте, где вы можете создавать папки для ваших приложений.
  • https://bitbucket.org/ Тоже самое, что и https://github.com/ Создавайте свой сайт с именем your-name.bitbucket.io
  • https://gitlab.com/ Тоже самое, что и https://github.com/ Создавайте свой сайт с именем your-name.gitlab.io
  • https://glitch.com/ На этом хостинге можно писать серверную часть на JavaScript и Node.js. Приложение засыпает если им сколько-то десятков минут не пользуются. Серверная часть будет всегда открыта другим на бесплатном плане. Когда закинете мышкой файл .wasm он окажется в папке Assets. Его нужно переместить в корень. Для этого кликните правой кнопкой файлу .wasm в папке Assets. Скопируйте "Image Address". Отройте терминал на Glitch и введите wget image_address (вместо image_address скопируйте путь, но удалите в пути символы связанные с рисунком
  • https://render.com/ тоже самое, что и Glitch, только серверная часть скрыта от других, но обязательно нужна серверная часть, хотя бы для запуска public, например:
    app.js

    JavaScript
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    import express from "express";
    import http from "http";
    import path from "path";
     
    const app = express();
    app.use(express.static(path.join(process.cwd(), "public")));
     
    const httpServer = http.createServer(app);
    const port = process.env.PORT || 3000;
    httpServer.listen(port, () => console.log("Listening at port: " + port));

Для запуска своего сервера выше на Node.js нужно локально установить пакеты: npm i express http Это пример для общего понимания, как захостить на Render, но Render лучше использовать если вам нужна серверная часть, например, для базы данных или для игры по сети с использованием вебсокетов.
Метки c++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru