LINUX.ORG.RU

Компиляция пакетов


0

1

Хочу собирать пакеты для дистрибутивов. Раньше пакеты собирал только для себя, CFLAGS не использовал.

Какие CFLAGS рекомендуете (как-то: -O0, -O1, -O2, etc.)? Плюсы известны, волнуют минусы.

Также укажите, что, кроме CFLAGS, необходимо знать для этого.

Спасибо.

Для бОльшей совместимости glibc дистрибутива должен быть как можно старее. Например Java от Oracle собирают в SuSE 9. Статическая линковка приводит к 1). Тому что программа вообще везде запускается 2). большой размер файла 3). Несет в себе старые версии библиотек со старыми уязвимостями. cFlags лучше всего те, где оптимизаций нет. Ну как максимум sse. Зависимости можно положить в каталог libs или в каталог программы. Тогда нужно сделать скрипт запуска, например sh doom3 (а внутри команда LD_LIBRARY_PATH=. ./doom3.x86). Какой командой узнать вообще-вообще все получившиеся зависимости от библиотек я не помню! Игры с поддержкой OpenGL нельзя линковать статически, потому что вариантов библиотек OpenGL в Linux как минимум три. Запакуем Mesa - а на ATi не пойдет... Кстати, игры надо компилировать либо с Mesa, либо с include-файлами с сайта opengl.org, последние поддерживают версию 4.1.

Zenithar ()

Собирайте в chroot для каждого дистрибутива в отдельности.

CFLAGS="-march=x86-64 -mtune=generic -O2" для amd64.
CFLAGS="-march=i686 -mtune=generic -O2" для x86.

что, кроме CFLAGS, необходимо знать для этого.


Способ сборки пакетов для каждого конкретного дистрибутива.

anon_666 ()

Кстати говоря - если ты сделаешь универсальный бинарник для всех дистрибутивов, могу дать тебе команду упаковки его в rpm- и deb-пакет для вообще-вообще всех дистрибутивов.

Zenithar ()
Ответ на: комментарий от anon_666

Ты добрый. Объясни, как можно четвертовать анально? Сначала гланды, потом глаза, потом позвоночник и наконец вырвать кишечник?

Это за такие советы стоит делать что-нибуь плохое. Открой страницу проприетарной Неры - 4 пакета, 2 rpm, 2 deb. Красота... Открой страницу виртуалбокса. 30 пакетов. Вопрос: зачем это надо? Представь себе страницу скачивания Homyak Bubble по твоему рецепту. По две версии игры для Windows. По одной для MAC OS X. По 40 для Linux. А зачем это надо? Не легче ли скомпилировать программу один раз, а на случай если какой-нибудь libpng с годами обновится с версии 1.2 до 1.4 положить версию 1.2 в каталог с программой? Если версия 1.2 уже есть в дистрибутиве то задействуется как раз она.

Zenithar ()
Ответ на: комментарий от Zenithar

Во-первых, кроме libc, программы обычно используют кучу других библиотек, версии кот-х разные в разных дистрибутивах. Следовательно, остаётся один вариант - таскать это всё с программой.

Отсюда вылазят два бага:
- glibc начиная с 2.12.2 требует минимальную версию ядра 2.6.27, это решается её кастрацией при сборке, но вылезут и другие проблемы.

- Такая программа будет жрать немеряно места на винте и, самое хреновое, в ram, особенно учитывая то, что код в generic билдах весит больше, чем native билд под конкретный проц.

Если версия 1.2 уже есть в дистрибутиве то задействуется как раз она.


Нифига.

anon_666 ()
Ответ на: комментарий от anon_666

В данный момент мучаюсь с настройкой Osmos. Шрифт игры не отображается с freetype 2.4.3 и выше, а другие не нравятся. Сделал 2.4.2 и положил в каталог с игрой - не держать же его во всей системе. Как ни мучаюсь с LD_LIBRARY_PATH и LD_PRELOAD, загружается библиотека из системы, с тем же названием, libfreetype.so.6.6.0 . Symlinks тоже сделал, не работает. Библиотека берется из системы.

Насчет замусоривания RAM - лишние 120 килобайт беды не сделают, но даже это решается выставлением минимума use-флагов для универсального бинарника.

Zenithar ()
Ответ на: комментарий от Zenithar

>Открой страницу проприетарной Неры - 4 пакета, 2 rpm, 2 deb. Красота... Открой страницу виртуалбокса. 30 пакетов.
Ты что-то делаешь не так. Наверно, это:

Открой страницу

Правильно так:
yaourt -S nerolinux
yaourt -S virtualbox_bin
Зачем пользователю вообще думать о пакетах?

Не легче ли скомпилировать программу один раз, а на случай если какой-нибудь libpng с годами обновится с версии 1.2 до 1.4 положить версию 1.2 в каталог с программой?

И такое в ауре встречается. Если у тебя говнодистрибутив, это ещё не повод заниматься мазохизмом.
В системе спокойно уживаются несколько версий libpng.

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

>http://www.insidepro.com/kk/231/231r.shtml
Мало того что outdated, ещё и бред. В O2 входят все оптимизации, которые гарантированно ускоряют, O3 может замедлить по сравнению с O2. Вообще, всё кроме O2 обычно не имеет смысла кроме как в source-based дистрибутивах и вредно в универсальных сборках (за исключением числодробилок и подобного).

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

Костыльность не для пользователя. Humble Bundle по понятным причинам недоступен ни в одном репозитарии, только в демо-версии. А это 10 новых игр, из них 5 с открытым исходным кодом с несвободным файлом данных. У каждой три вида одного и того же универсального бинарника с минимальным количеством зависимостей, которые есть везде, и несколькими библиотеками, которые есть не везде, на всякий случай: rpm, deb, tar.gz. Автор темы спокойно может сделать то же самое и интересуется, как. А ему предлагат выбрать пару версий нескольких популярных дистрибутивов и зачем - непонятно

Zenithar ()
Ответ на: комментарий от Zenithar

>Библиотека берется из системы.

Руки ровняй.

$ cp /usr/lib/libfreetype.so.6.6.2 ./
$ LD_PRELOAD=./libfreetype.so.6.6.2 ldd `which geany` |grep libfreetype
./libfreetype.so.6.6.2 (0x00007f8724569000)

>Насчет замусоривания RAM - лишние 120 килобайт

4.2

$ du -ch `ldd /usr/bin/geany |awk '{if(NF==4)system(«readlink -f » $3)}'`
4,3M /usr/lib/libgtk-x11-2.0.so.0.2200.1
716K /usr/lib/libgdk-x11-2.0.so.0.2200.1
136K /usr/lib/libatk-1.0.so.0.3209.1
...
12K /usr/lib/libXau.so.6.0.0
20K /usr/lib/libXdmcp.so.6.0.0
16M итого

anon_666 ()
Ответ на: комментарий от Zenithar

aur/aquaria-hb_version 1.1.3-3 (25)
Humble Bundle Version. 2D Fantasy Action-Adventure
aur/aquaria-hib-hg 25-1 (0)
Humble Bundle Version. 2D Fantasy Action-Adventure, Open Source Version with Cmake buildsystem
aur/gish-hb 1.53-1 (6)
[Humble Bundle] A one of a kind 2d sidescroller with a twist you play as a totally physics based ball of tar.
aur/lugaru-hb_version 1.0c-2 (Out of Date) (9)
Humble Bundle Version. Lugaru is a third-person action title. The main character, Turner, is an anthropomorphic rebel bunny rabbit with
impressive combat skills. In his quest to find those responsible for slaughtering his village, he uncovers a far-reachi

Чего там нет в репозиториях? AUR содержит лишь скрипты для создания пакетов на машине пользователя.

Всё оно Depends On : libvorbis openal sdl gcc-libs sdl_image mesa, что вполне нормально.

x3al ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.