LINUX.ORG.RU

C++ Как собрать самостоятельный пакет?

 , ,


1

2

Часто бывает, что скомпилировав бихарник на c++ в linux arch, юзеры не могут его запустить на какой-нибудь юбунте, так как им нужна новая версия libc и докачать ещё всяких зависимостей… Короч, как собрать прогу чтобы у всех пошло? Может стоит слинковать всё в один бинарь или сделать какой-то пакет для установки в специальном формате? А если распространять через исходники, то зависимости тоже хранить с кодом? Используется git и система сборки SCons, под виндой все зависимости собраны в .dll и коды выкачаны в папку thirdparty, под линуксом зависимости скачаны в виде dev пакетов через pacman и мне всегда приходится писать инструкцию чтобы юзеры качали себе такие же зависимости самостоятельно.

Компиляторы: clang/mingw/gcc
Зависимости: openmp, openal, c++20, glfw3


Последнее исправление: HPW-dev (всего исправлений: 5)

В первую очередь, собирать стоит на очень старой системе, например Debian 7, это должно практически полностью исключить проблемы с libc. А всё остальное можно вкомпилить или статически, или опять же использовать старые версии.

Werenter ★★☆
()
Ответ на: комментарий от HPW-dev

Тогда тебе стоит использовать старую libc, новую версию компилятора и статически линковать libstdc++, тогда должно работать на старых системах нормально.

Werenter ★★☆
()
Последнее исправление: Werenter (всего исправлений: 1)

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

untitl3d
()
Ответ на: комментарий от HPW-dev

там ещё зависимость по фичам из c++20

Переписать получится выкинув эти фичи? А так собирать в минимально возможной системе там где это собирается минимально возможной версией компилятора, с версиями библиотек в текущих LTS дистрах. Дабы люди могли у себя пересобрать потом без бубнов.

Ну и протестировать самому на прошлых и текущих актуальных версиях дистрибутивов.

Или упихивай всё в appimage если ты выбрал для себя определённые версии компилятров и библиотек.

Тестируй, тестируй, тестируй, тестируй. Порой у половины не собирается и всему виной одна депрекатед функция и ради совместимости сделать пару ifdef и/или обёртку над функциями. Или фича языка которую ты используешь один раз и её использование проще выкинуть.

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

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от HPW-dev

Сделает ему chmod +x (или ставит галку в ГУЯх) и запускает, как обычный бинарник, даблкликом. Некоторые даже .desktop по XDG путям раскидывают при первом запуске. Тогда вообще как обычную программу из меню/dash-а.

SkyMaverick ★★★★★
()
Последнее исправление: SkyMaverick (всего исправлений: 1)

все способы нормальные. Можно слинковать статически с какой-нибудь musl. Можно заявить «я поддерживаю убунту 18.04+» и линковать с glibc из этой убунты.

Можно распространять исходники и, если лень писать инструкции, завести wiki и предложить юзерам ее заполнить. В конце концов опенсорс - дело коллективное.

Кстати советую попробовать zig cc - этой штукой можно кросс-компилять подо что угодно, под винду, под любую версию glibc, и т.п.

Lrrr ★★★★★
()
Ответ на: комментарий от untitl3d

был период когда пакеты уже придумали и машины были еще очень слабые, но он прошел.

Куда прошел? Он только наступил в связи с санкциями для РФ и запретом на экспорт Longsoon.

Shushundr ★★★★
()

Короч, как собрать прогу чтобы у всех пошло?

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

slackwarrior ★★★★★
()
Ответ на: комментарий от Lrrr

Можно слинковать статически

Теперь нельзя… Недавно добавил загрузку плагинов из шаредов и оказалось что статичная линковка glibc/musl не позволит грузить библиотеки в рантайме. Короч лучше в appimage паковать и юзать старые совместимые версии либ

HPW-dev
() автор топика