C ++ - плохой выбор для кроссплатформенного установщика, потому что нет такого понятия, как кроссплатформенный машинный код.
Код C ++ может быть чрезвычайно переносимым, но его нужно компилировать для каждой платформы,и затем вы получите отдельный выходной исполняемый файл для каждой платформы.
Если вы хотите собрать установщики для многих платформ из одного исходного файла, вы можете использовать C ++.Но если вы хотите создать ОДИН установщик, который работает на многих платформах, вам нужно использовать интерпретированный или JIT-скомпилированный язык с поддержкой времени выполнения, доступной для всех ваших целей.Из них единственным, который, вероятно, уже установлен на большинстве компьютеров каждой платформы, является Java.
Хорошо, если предположить, что вы собираете много одноплатформенных инсталляторов из машинного кода, эточто нужно:
Вам необходимо получить сжатый код в программу.Вы хотите сделать это так, чтобы это не повлияло на время загрузки и не привело к тому, что компиляция заняла бы несколько месяцев.Поэтому использование инициализированного глобального массива - плохая идея.
Один из способов - связать ваши данные в качестве дополнительного раздела.Есть инструменты, которые помогут с этим, например Конвертер двоичных в COFF , я также видел версию ELF, возможно это .Но это все равно может привести к тому, что библиотека времени выполнения попытается привести весь файл в память до начала выполнения.
Другой способ - использовать API ресурсов для конкретной платформы.Это эффективно, но зависит от платформы.
Самое простое решение - просто добавить сжатый архив в исполняемый файл, а затем добавить еще восемь байтов со смещением файла в том месте, где начинается сжатый архив.Распаковка выполняется так же просто, как открытие исполняемого файла в режиме «только для чтения», fseek(-8, SEEK_END)
, чтение правильного смещения, поиск в начале сжатых данных и передача этого потока в декомпрессор.
Конечно, теперь я нахожу веб-сайт с почти такими же методами .
и , вот программа, которая реализует последнюю опцию с дополнительной возможностью хранить несколько файлов,Я бы не рекомендовал делать это, пусть библиотека сжатия позаботится о сохранении метаданных файла.