создание дистрибутива программы под linux
, какие-нибудь подводные камни (с) ?Динамическое линкование, лоадер, архитектура (x86,x86_64,arm)
Чтобы сделать самораспоковывающийся архив - посмотри на тулзу makeself.
кроме версии ядра может быть косяк с версией glibc при некоторых способах линковки, конкретнее - вроде при статической линковке для функций вроде gethostbyname_r* на целевом компе нужна будет та же версия glibc.
еще возможны проблемы с разными менеджерами памяти в либах и проге в случае динамического связывания (хотя тут я не уверен).
*хинт: у меня про это сообщает сам компилер
еще возможны проблемы с разными менеджерами памяти в либах и проге в случае динамического связывания (хотя тут я не уверен).
*хинт: у меня про это сообщает сам компилер
Есть правила хорошего тона, которым желательно следовать, например:
1. установка программы должна состоять из запуска следующих команд:
./configure
./make
./make install
2. программа должна по умолчанию ставиться в /usr/local
1. установка программы должна состоять из запуска следующих команд:
./configure
./make
./make install
2. программа должна по умолчанию ставиться в /usr/local
современные правила хорошего тона подразумевают распространение программы в deb или rpm пакетах.
Современные правила хорошего тона подразумевают распространение
вменяемых исходных текстов. А уж пользователь сам решит, где ему
поставить галочку, определяющую, в каком виде собирать двоичные
пакеты.
---
"This user is BSD-compliant."
вменяемых исходных текстов. А уж пользователь сам решит, где ему
поставить галочку, определяющую, в каком виде собирать двоичные
пакеты.
---
"This user is BSD-compliant."
о, отличная идея. почитаю как такие пакеты делать. впринципе, на deb и rpm и остановлюсь
собственно я не хотел исходный код прилагать, поэтому и рассматривал вариант распространения скомпилированной программы.
собственно я не хотел исходный код прилагать, поэтому и рассматривал вариант распространения скомпилированной программы.
да, я как раз и думал об этом. указать зависимость от определенной версии glibc в пакете похоже будет ок.
рассматривается простейший случай - обе машины x86, kernel & glibc одной и той же версии, одна система - mandriva 32bit, другая - ubuntu 32bit.
под различием динамической линковки ты имеешь в виду что что одна и та же программа при вызове dlopen\dlsym\dlclose может сработать по разному на разных системах?
upd.
кстати, а разве лоадер и система динамической линковки не являются частью кернела?
под различием динамической линковки ты имеешь в виду что что одна и та же программа при вызове dlopen\dlsym\dlclose может сработать по разному на разных системах?
upd.
кстати, а разве лоадер и система динамической линковки не являются частью кернела?
У тебя пакет использует функции только libc?
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."
Обычно это делают сборщики дистрибутивов.
Или ты предлагаешь человеку собирать под все возможные дистрибутивы самому?
Или ты предлагаешь человеку собирать под все возможные дистрибутивы самому?
указать зависимость от определенной версии glibc в пакете похоже будет ок.все пользователи других версий glibc скажут тебе спасибо
обычно достаточно наличия сборки хотя бы в rpm или deb. их уже можно конвертить друг в друга (см. alien).
для остальных - давать сорцы или скомпиленные бинари, хотя в принципе тот же deb или rpm можно открыть как архив, посмотреть скрипты, распаковать куда надо и настроить руками.
для остальных - давать сорцы или скомпиленные бинари, хотя в принципе тот же deb или rpm можно открыть как архив, посмотреть скрипты, распаковать куда надо и настроить руками.
> кстати, а разве лоадер и система динамической линковки не являются частью кернела?
На линуксах это не входит даже в функциональность libc,
этим заведуют отдельная библиотека и отдельная программа.
---
"Прогресс науки обратно пропорционален числу выходящих журналов."
На линуксах это не входит даже в функциональность libc,
этим заведуют отдельная библиотека и отдельная программа.
---
"Прогресс науки обратно пропорционален числу выходящих журналов."
современные правила хорошего тона подразумевают распространение программы в deb или rpm пакетах.первый камент по делу, и за что-то заминусовали.
Конечно же, програ должна поставляться в пакетах под разные системы + исходники tar.gz, которые собираются либо cmake/make, либо устаревшим вариантом configure/make
Конечно же, програ должна поставляться в пакетах под разные системыничего она не должна. Исходники, README и самораспаоквывающийся архив c бинарём в типичной конфигурации. А добавлять поддержку "всех систем" должны адепты этих систем.
да это все гентушники, я ж забыл ebuild указать как вариант
Тем не менее авторы софта могут делать пакеты и под "все системы".
glibc разве не с оратной совместимостью?
я сейчас рассматриваю случай распространения дистрибутива без исходников
я совсем не на "ты" с линуксом
что значит различные конфигурации дистрибутива линукса? различный набор установленных компонент?
так, попробую с концептуальных вопросов типа "как _должна_ распространятся программа" вернуться вниз
допустим есть простая программа
скомпилил ее gcc какой-то версии, пусть 4.0
насколько я понял выполнение конкретно этой программы зависит от рантайма - glibc
1) пусть конечная система один в один, но glibc отличается. правильно я понимаю что если версия glibc меньше чем системы на которой компилировалось, то программа не запустится. а если больше - то все ок.
2) совершенно произвольный линукс (для упрощения обе машины - 32битные). почему скомпиленная мной программа может не запустится на этой машине?
я совсем не на "ты" с линуксом
что значит различные конфигурации дистрибутива линукса? различный набор установленных компонент?
так, попробую с концептуальных вопросов типа "как _должна_ распространятся программа" вернуться вниз
допустим есть простая программа
#include "stdio.h"
int main
{
printf("Hello, world!\n");
return 0;
}
скомпилил ее gcc какой-то версии, пусть 4.0
насколько я понял выполнение конкретно этой программы зависит от рантайма - glibc
1) пусть конечная система один в один, но glibc отличается. правильно я понимаю что если версия glibc меньше чем системы на которой компилировалось, то программа не запустится. а если больше - то все ок.
2) совершенно произвольный линукс (для упрощения обе машины - 32битные). почему скомпиленная мной программа может не запустится на этой машине?
Если скомпилишь/слинкуешь статически, то запустится везде.
Другое дело, не понятно, зачем тебе распространять программу в бинариках?
Другое дело, не понятно, зачем тебе распространять программу в бинариках?
Очевидно, чтобы не предоставлять свои исходники всем. Не все проги являются OpenSource, бывают free, и даже платные.
Если скомпилишь/слинкуешь статически, то запустится везде.Неа, можно нарваться на "слишком старое ядро" даже в пределах 2.6.*.
Ну, тогда такая софтина под линукс обречена на успех!
skype, teamviewer, heroes of newerth, вообще любая проприетарная программа, которая не только под винды но и под линукс. я считаю что пусть будет лучше уж так, чем версия только под винду.
Признаю ошибку.
Если у ТС столь же замечательный проект, то я только приветствую.
Если у ТС столь же замечательный проект, то я только приветствую.
То-то линуксовый скайп регулярно падает, причём не ясно где.
Организовать набор библиотек определённой версии специально для
одной программы в операционных системах куда меньшая проблема,
чем определение, что же именно они там сломали, что их программа
работает только на ядрах определённого сорта.
---
...Я работаю антинаучным аферистом...
Организовать набор библиотек определённой версии специально для
одной программы в операционных системах куда меньшая проблема,
чем определение, что же именно они там сломали, что их программа
работает только на ядрах определённого сорта.
---
...Я работаю антинаучным аферистом...
у меня падает ясно где - когда выбираю транслировать кусочек экрана и растягиваю область трансляции за предел рабочего стола или впритык к краю. других падений не замечал.
>То-то линуксовый скайп регулярно падает, причём не ясно где.
типа нелинуксовый не падает или если падает, то сразу понятно где?
типа нелинуксовый не падает или если падает, то сразу понятно где?
skype, teamviewer, heroes of newerth, вообще любая проприетарная программа, которая не только под винды но и под линукс. я считаю что пусть будет лучше уж так, чем версия только под винду.поставил плюс, но в отношении некоторых из них (скайп особенно) лучше б вообще никакой версии не было

Оставить комментарий
serge18
хочу создать дистрибутив своей тулзы под линукс. то есть чтобы пользователь скачал архив, распаковал, запустил INSTALL и радовался жизни. простейший INSTALL подразумевает копирование программы в папку пользователя, добавление ссылки куданибудь в /usr/bin, копирование so в /opt/lib/до этого я программировал только под debian для себя и был счастлив, поэтому появились соответствующий вопрос:
в чем принципиальные отличия между различными дистрибутивами линукса со стороны программиста, какие-нибудь подводные камни (с) ? кроме версии ядра =) т.е. наверняка возможно без особого труда скомпилировать из под дебиана программу для убунты.