Форум программистов, компьютерный форум, киберфорум
Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607

Создание набора файлов проекта для запуска приложения

22.04.2016, 09:50. Показов 1772. Ответов 15

Студворк — интернет-сервис помощи студентам
Доброго дня!

Использую для одного из своих проектов набор утилит srecord, на локальной машине все прекрасно работает, устанавливается и т.д., независимо от ОСи. Но сложность возникает в создании "portable" версии одной из необходимых утилит. Если в Windows компиляция дает возможность пользоваться утилитой автономно, то есть отдельным exe-шником, то компилированный файл линукса во-первых (насколько я понял) ориентирован на свою платформу - будь то debian, fedora или другая, во-вторых, не может работать без "установки" всего набора необходимых библиотек из архива или репозитория.

Соответственно, вопрос - как сделать "автономный" набор библиотек, чтобы можно было распаковать его на любой Linux-машине (будем говорить - хотя бы о RedHat, хотя в идеале было бы здорово иметь некий универсальный вариант) и запустить? Я пытался с помощью выделения зависимостей просто стянуть скомпилированные библиотеки с репозитория и расположить их со скомпилированным запускаемым файлом. Но после 10го или 12го файла библиотеки уже отчаялся - зависимости представляют собой дерево, что заметно усложнило процесс сбора библиотек, и соответственно, очевидность положительного результата.

ЗЫ: в java есть например, возможность запихивать все необходимые библиотеки в один jar-архив, чтобы не качать их по отдельности. В винде все понятно - компилировать можно с библиотеками и без. В Python'е для этого есть специальные утилитки, по крайней мере под Винды. А как с этим работать в Линуксе?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.04.2016, 09:50
Ответы с готовыми решениями:

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

Создание файла для запуска приложения
Добрый день! У меня такая проблема. Написал я для себя небольшое приложение. Запускаю его в идее все хорошо работает. Но вопрос... Как...

Создание проекта в cmake для с и с++ файлов
Доброго времени суток. Есть вопрос. У меня с++ проект собирается с помощью cmake. Возникла необходимость вставить несколько *.с...

15
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
22.04.2016, 12:00
В Линуксе есть специальный формат пакетов (.deb для Debian-подобных, .rpm для Red Hat). В новой версии Ubuntu презентован так называемый 'snap'-формат.
Ну и никто не отменял стандартных исходников собираемых в С-формате.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
22.04.2016, 12:20  [ТС]
Цитата Сообщение от Marinero Посмотреть сообщение
В Линуксе есть специальный формат пакетов (.deb для Debian-подобных, .rpm для Red Hat). В новой версии Ubuntu презентован так называемый 'snap'-формат.
Ну и никто не отменял стандартных исходников собираемых в С-формате.
C-формат требует установки дополнительных каких-то утилит, которые не установлены на сервере (turbo-boost или
как-то так). То есть скомпилить без этих утилит не получится.

.rpm есть готовые, но не под нужную redhat. Есть под rl6, а мне нужно под rl5.

Похоже, "мультиплатформенность" - это непозволительная роскошь при определенных условиях. О которой надо либо забыть, либо танцевать с бубном, чтобы это заработало... Печально (.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
22.04.2016, 12:42
Цитата Сообщение от Voland_ Посмотреть сообщение
Похоже, "мультиплатформенность" - это непозволительная роскошь при определенных условиях. О которой надо либо забыть, либо танцевать с бубном, чтобы это заработало... Печально (.
Да не настолько всё печально :-).
Два общепринятых способа вам подсказали.

1. (Кошерный способ) Собитаете пакеты под интересующие вас дистрибутивы. Зависимости будут доставляться автоматически.
2. Тоже кошерный. Собитаете из исходников на каждой платформе.

Кроме этого
3. (Хочу как в венде, распростанять бинарник, собрав "зоопарк" бислиотек). Собираете в RHEL 5 (если целевые платформы достаточно новые, то можно и в RHEL 6). Вместе с собранными утилитами запаковываете в пакет (rpm или deb) использовавшиеся для сборки экзотические библиотеки (основные, скорее всего, на целевой платформе уже установлены).
4. (Хочу как в венде, одним исполняемым файлом, дублируя одни и те же библиотеки во все утилиты). Комилируете статически (тоже рекометдуется FREL 5 в качестве среды сборки) и распространяете бинарники.
1
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
22.04.2016, 12:44
Ну в каждом таком пакете(rpm и deb) априори идут зависимости, которые обычно должны автоматически «разрешаться» (доустанавливаться).
В сборке «из исходников» присутствует проверка наличия необходимых приложений/библиотек в системе, которые, в случае необходимости, доустанавливают уже вручную.
Кроме того (наверное Ваш вариант) имеется вариант установки «полного комплекта» (обычно в директорию /opt системы) (аналог «portable»-программ в windows). Например подобным образом устанавливаются большинство веб-приложений(Skype, Viber, Telegram, Google-Chrome …)
1
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
22.04.2016, 12:54
Voland_, PS. Забыл самый модный способ.
6. Распространяете в виде docker-контейнера.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
22.04.2016, 13:01  [ТС]
Буду изучать, спасибо за рекомендации.
RPM-вариант от rl6 на rl5 не работает. Не находит какие-то библиотеки. Вариант с компиляцией пока не опробован, еще предстоит. Для меня сложность еще в том, что под рукой нет redhat-окружения, в котором бы я имел админские права и мог попробовать. То что раньше получалось - это требование админских прав для распаковки RPM и отсутствие возможности собрать проект на машине. А те кто имеет админские права - не желают ставить приложение "не из пакета". Но и переход серверов на rl6 предполагается через месяц . То есть программа заработает через месяц.

Добавлено через 46 секунд
Цитата Сообщение от gng Посмотреть сообщение
6. Распространяете в виде docker-контейнера.
это будет здорово тогда, когда прога хоть как-нить запустится на сервере. А я не могу этого достичь пока что.
0
Эксперт NIX
 Аватар для Marinero
2796 / 2039 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
22.04.2016, 13:44
Цитата Сообщение от Voland_ Посмотреть сообщение
в котором бы я имел админские права
ИМХО «всунуть» что-либо в систему без прав практически невозможно…
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
22.04.2016, 14:32  [ТС]
Цитата Сообщение от Marinero Посмотреть сообщение
«всунуть»
да мне вроде бы и не требуется это. Мне бы запустить софт, который должен был бы обеспечить мне то, что я хочу. На любой машине. А выходит, что "не все дистрибутивы одинаково полезны". Пока задача не такая уж серьезная - задумался написать все на java или python. Благо - этих окружений предостаточно на все ядра, ОСи и платформы.
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
22.04.2016, 16:30
Цитата Сообщение от Voland_ Посмотреть сообщение
RPM-вариант от rl6 на rl5 не работает.
Приведенные вами утилиты требуют кроме стандартных либ, которые есть везде, только
libgcrypt и libgpg-error, которые есть почти везде. Для сборки еще требует boost, но собранные утилиты от него не зависят.
Собранные на centos 5 утилиты у меня запустились на centos 6, centos 7, debian wheezy, debian jessie, только на последнем утилиты требовали библиотеку libgcrypt более статой версии, нежели установлена в системе. Дебиан , в отличие от РедХэт поддерживает lsb без особого энтузиазма.
Бинарники переносил и запускал от обычного пользователя.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
22.04.2016, 16:37  [ТС]
gng, я мало что полезного выделил из вашего поста. Вы можете поделиться набором файлов, который запускали? Потому что я скачивал libcrypt и libgpg-error - они потянули (потребовали) еще несколько билиотек, которые в свою очередь потянули еще... может я что-то не так делал?

Давайте я попробую ваш скомпиленый вариант на redhat?
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
22.04.2016, 16:52
Лучший ответ Сообщение было отмечено Marinero как решение

Решение

Цитата Сообщение от Voland_ Посмотреть сообщение
Вы можете поделиться набором файлов, который запускали?
srec_cat srec_cmp srec_info
Цитата Сообщение от Voland_ Посмотреть сообщение
Потому что я скачивал libcrypt и libgpg-error - они потянули (потребовали) еще несколько билиотек,
Трудно представить систему, включая виртуалки и контейнеры, где этих библиотек нету. Поэтому и скачивать ничего не нужно.
Цитата Сообщение от Voland_ Посмотреть сообщение
Давайте я попробую ваш скомпиленый вариант на redhat?
Вложил
Вложения
Тип файла: 7z srec.7z (1.25 Мб, 3 просмотров)
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
22.04.2016, 17:12  [ТС]
gng, спасибо Вам, добрый человек! Я так и не понял как именно вы сбилдили эти файлы, но это работает на RedHat. Со временем попробую и на ubuntu.
0
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
25.04.2016, 15:13  [ТС]
gng, а на Ubuntu 14 прога ответила, что "Exec format error"...
PS: но запуск ее на Ubuntu и не требуется - нужно только определить в makefile, существует ли srec_cat в окружении и пытаться запустить локальный srec_cat, если он не был установлен ранее... Вот, пытаюсь составить такое условие в скрипте Makefile...
0
923 / 639 / 198
Регистрация: 08.09.2013
Сообщений: 1,693
25.04.2016, 18:53
Цитата Сообщение от Voland_ Посмотреть сообщение
Exec format error"
Вы его не на 32-бит системе пробуете запустить? Компилировалось под 64.
1
 Аватар для Voland_
1983 / 1276 / 131
Регистрация: 04.01.2010
Сообщений: 4,607
26.04.2016, 09:01  [ТС]
Цитата Сообщение от gng Посмотреть сообщение
Вы его не на 32-бит системе пробуете запустить? Компилировалось под 64.
Вы правы. Доедаю свою шляпу. По всей видимости причина в этом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.04.2016, 09:01
Помогаю со студенческими работами здесь

Создание библиотеки и приложения для чтения файлов djvu .NET
Собственно вопрос: С чего начать? Интересует полная разработка собственного приложения с нуля минуя сторонние библиотеки для работы с...

Создание .mp4 видео из набора .ppm файлов
Здравствуйте, возникло задание, из набора фреймов формата .ppm склеить видео .mp4. ffmpeg через консоль справляется с этим восхитительно,...

Создание проекта консольного приложения
Проблема вот такая, не могу создать проэкт Консольное приложение win32. Появляется пустое окно и зависает. Далее нажать нельзя, отмену...

Изменение набора данных DataSet проекта для вывода в ReportViewer
Ни когда не было задачи печати отчетов... Прошу помощи в программном заполнение набора данных для печати из ReportView Что сделано: ...

Сборка проекта для запуска на другом PC
Написал программу мульти-постинга вк для подруги она не бум бум в программирование. Нужно собрать в одном месте все чем пользуется скрипт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru