PDA

Просмотр полной версии : Компиляция программ из исходников


Сергей Копылов
27.05.2007, 19:57
Проблема в том, что я соверщенно не умею компилировать из исходников. Что делать?

VictorS
27.05.2007, 20:05
Сергей Копылов, компилируется обычно одной командой "make install" или даже просто "install". Иногда может потребоваться еще предварительно сконфигурировать ("make configure", "configure" и т.п.).

ЗЫ: надеюсь не окажется что я сказал какую-то глупость. Если что, то профи поправьте меня. :)

Frosty
27.05.2007, 20:05
Проблема в том, что я соверщенно не умею компилировать из исходников. Что делать?

Добавлено через 2 минуты
А... Я понял, это просто архив... Разберёмся..

А компилить всё равно не умею. ;)
А мы похожи, мб нам кто нибудь устроит краткий How-to, но не только дать список консольных команд, которыми дело проворачивается, а объясить что этими командами делается и для чего оно все нужно.

VictorS
27.05.2007, 20:25
Frosty, у разных программ это может происходить по разному. Обычно все это происходит через утилиту make, которая выполняет сборку программы на основе make-файла. Иногда могут быть добавлены shell-скрипты install и configure для быстрого и понятного запуска. По идее процедура сборки должна быть описана в каком-нибудь readme к программе.

mxx
27.05.2007, 21:21
процедура сборки почти всегда описана в файле INSTALL или README.
чаще всего это запуск скрипта configure, который проверяет, установлено ли всё нужное для сборки и настраивает разные параметры, подготавливая Makefile.
затем команда make собирает всё, основываясь на Makefile.
и затем make install от рута "устанавливает", т.е. копирует готовые файлы в соответствующие каталоги.
вместо make install можно использовать например checkinstall, он не просто установит, но и сделает deb или rpm пакет.

Doctor_Zlo
05.06.2007, 21:23
Если я поставлю какую то программу из исходников, а потом найду deb пакет той же самой программы и установлю его, не станут ли они каким то образом конфликтовать? И вобще всегда ли можно смело ставить из исходников или стоит стараться это делать как можно реже?

rmn
05.06.2007, 22:14
Если я поставлю какую то программу из исходников, а потом найду deb пакет той же самой программы и установлю его, не станут ли они каким то образом конфликтовать?
это зависит от того, куда программа из исходников была установлена. Каталог установки определяется при или непосредственно после сборки. Например, в том случае, если для сборки используются утилиты GNU autotools, то префикс указывается скрипту ./configure в опции --prefix

По умолчанию префиксом обычно является /usr/local/ . Обычно, но не обязательно. Так что лучше его явно всегда указывать. Согласно документу-стандарту файловой системы в unix (FHS (http://www.pathname.com/fhs/)) для установки "левых" программ следует использовать либо каталог /usr/local/ , либо /opt/programname/ , либо вообще что-нибудь в домашнем каталоге для этого организовать, если пользоваться программой будет только один юзер (например, устанавливать все в ~/soft/)

Пакетный дистрибутив обычно собирается с переопределенным префиксом со значением /usr/ и при сборке из исходников желательно такого префикса избегать, тогда и проблем с пакетами не будет.

И вобще всегда ли можно смело ставить из исходников или стоит стараться это делать как можно реже?
в пакетном дистре предпочтительнее иметь дело с пакетами. :)

Все, что собрано вручную и установлено (в худшем случае еще и с перезаписью файлов из пакетов) потенциально опасно для системы. Плохо поддается учету в отличии от того, что ставится из пакетов - образуется груда неизвестно откуда и когда взявшихся файлов, тогда как для всех "пакетных" файлов имеется общая база данных и всегда можно удостоверится в подлинности и принадлежности каждого файла в системе.

Скажем, в debian при сборке пакета для всех файлов, ему принадлежащих, подсчитывается контрольная сумма (см. /var/lib/dpkg/info/) и изменения файлов в процессе эксплуатации системы можно всегда отследить. С тем, что установлено из исходников, такого не сделаешь.

ArcFi
06.06.2007, 01:14
Если я поставлю какую то программу из исходников, а потом найду deb пакет той же самой программы и установлю его, не станут ли они каким то образом конфликтовать? И вобще всегда ли можно смело ставить из исходников или стоит стараться это делать как можно реже?
Doctor_Zlo, по изложенным выше причинам лучше сразу после компиляции не спешить с "sudo make install" а выполнить "checkinstall" для сборки соответствующего пакета. ;) Существуют и другие способы сборки deb-пакетов, в частности, здесь (http://forum.battlefox.ru/showthread.php?p=115023#post115023) имеется пару линков.

Сергей Копылов
02.04.2008, 14:47
.:: Скрытый текст<br />Вы должны войти под своим логином или зарегистрироваться и иметь 25 сообщение(ий) ::.

Ringo
02.04.2008, 16:35
Гм. это пишется во всех файлах INSTALL, которые идут обычно с сорцами. да и инфа эта никакая не секретная, а легкодоступная)

tmp0000
07.04.2008, 08:16
Сергей Копылов, я уже устал всем повторять, что make install - не лучшее решение.
Почитайте в lor-faq про checkinstall.

Ringo
08.04.2008, 16:38
tmp0000, а префиксы не спасают?

mxx
15.04.2008, 21:01
кто может помочь с кросскомпиляцией? или ткнуть в мануал какой-нибудь...
конкретно: нужно собрать 32битный мплеер на x64 :)

rmn
15.04.2008, 22:49
mxx, м.б. google ? :) кто ж еще-то.

zhekas
15.04.2008, 22:55
кто может помочь с кросскомпиляцией? или ткнуть в мануал какой-нибудь...
конкретно: нужно собрать 32битный мплеер на x64
http://disk.karelia.ru/z/zhekas/Linux/src/Mplayer/manual
Либо официальный сайт http://www.mplayerhq.hu

mxx
15.04.2008, 23:26
rmn, в том-то и дело, что не гуглится :(
так хочется фильм посмотреть, а там ts контейнер и vc1 кодек, без win32 кодеков видео убегает вперёд постоянно.
нашёл старую сборку 32битного мплеера, но она настолько старая, что в ts не видит видео...
выход - собрать 32битный новый мплеер - но как - фиг знает :)

tmp0000
15.04.2008, 23:36
Мб это, или я торможу?
http://www.mplayerhq.hu/DOCS/HTML/en/faq.html#id2552977
http://www.linuxquestions.org/questions/linux-software-2/compiling-mplayer-32bit-on-fedora-4-64bit-356837/

ArcFi
15.04.2008, 23:58
mxx, http://forum.battlefox.ru/showthread.php?t=6693 -- этот топик смотрел?

mxx
16.04.2008, 01:47
всем спасибо, с компиляцией вроде разобрался :)
с поиском и установкой нужных 32битных либ очень помог пакет getlibs: http://ubuntuforums.org/showthread.php?t=474790
ArcFi, как раз на ubuntuguides и есть ссылка на очень старый mplayer, который не видит видео в .ts
в общем мплеер теперь использует win32 кодеки, но страшно ругается:
Starting playback...
ProcessInputError r:0xffffff9c=-100 (keyframe: 1)
ProcessInputError r:0x80004005=-2147467259 (keyframe: 1)??,?% 0 0
ProcessInputError r:0x80004005=-2147467259 (keyframe: 1)??,?% 1 0
ProcessInputError r:0x80004005=-2147467259 (keyframe: 1)??,?% 2 0
ну зато wmv9 обычные теперь играются, и то хорошо :)
вот так печально закончилась моя первая попытка посмотреть hd-dvd remux :)
кстати в 32битном режиме если использовать ffmpeg - то уже не хватает производительности процессора :) всё таки есть прок от 64битности ;)

MuR
26.04.2009, 01:06
а еще компилить можно с оптимизацией, путем добавления команд
export CFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
export CXXFLAGS="-march=native -O2 -pipe -fomit-frame-pointer"
перед компиляцией. если что поправьте меня, т.к. в моем дистрибутиве эти настройки записаны в файл и я их каждый раз не ввожу.
еще поясню, что опция -march=native дает команду определить компилятору семейство вашего процессора совместно с архитектурой операционной системы.
-O2 значит второй уровень оптимизации, его обычно рекомендуют для оптимальной сборки. например -O3 может привести к непредвиденному результату. :)