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

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

Запись от 8Observer8 размещена 12.07.2024 в 17:23
Показов 1845 Комментарии 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++
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Новые блоги и статьи
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru