LINUX.ORG.RU

Анализ сообщений об ошибках.


0

0

Вопрос следующий: каким ибразом интерпретировать сообщения команды make об ошибках при компилляции.
Я не рассчитываю получить ответ на вопрос. Прошу указать ссылку: что бы почитать на эту тему.

Меня интересует как выяснить причину по которой процесс компилляции был прерван.
Точнее - давняя мечта, поиграть в преферанс под Линуксом. Комплект исходников я нашел
на http://unixware.ru/program.pl?prog_id=144, но он не собирается. Пытаюсь выяснить почему?
Последнюю версию библиотеки Qt скачал, собрал, чего ему еще не хватает.

Да и вообще интересно анализировать ошибки. Вот Slowo, на моей машине собрался без проблем,
а под RH 7.2 нет. Притом, что скомпиллированный у меня бинарник работал.


А правила написания makelil'ов ручками надо знать. Одну статью на эту тему я нашел, но с предложенными
тобой ссылками она не совпадает. Благодарю.

Ikonta_521
() автор топика

может запостишь сообщения об ошибках make на префе этом твоем и разберемся весте? на примере так сказать

anonymous
()

читай лог выполнения майка там все написанно.

anonymous
()

Рекондую посмотреть куда перенаправляется stderr - все ошибки (сообщения о них) идут на stderr, и некоторые перенаправляют вывод скажем в /dev/null:) - в итоге никаких ошибок - но прога не компилится:)

Good Luck!

tvn
()

2 tvn

Если к строчке скрипта добавить 2>/dev/null, то ошибки, увы, никуда не денутся. Будут потеряны лишь сообщения об ошибках.
2>/dev/null - мое любимое выражение, но это так, к слову.

А за совет спасибо.

Ikonta_521
() автор топика

Sorry;) Но идея то какая 2>/dev/null и нет ошибок;)

tvn
()

Не понял, зачем ты извиняешься: вроде как не за что.
Но этот так, к слову.

А теперь по делу:
Я бы просил высказать идеи по следующим вопросам:

1. Что можно сделать, если make сообщает об отсутствии некоторых заголовочных файлов (*.h).
Кроме как:
a) Выдрать тот же пакет с другого сервера.
b) Начитавшись исходников попытаться самому дописать недостающие фрагменты исходного кода.

2. Как выяснить почему один и тот же пакет исходников без проблем собирается в одной системе (BlackCat6.02) и не
компиллируется в другой (RedHat 7.2).
При том, что бинарник полученный компилляцией этого пакета работает и там, и там.

Ikonta_521
() автор топика

> 1. Что можно сделать, если make сообщает об отсутствии некоторых >заголовочных файлов (*.h).
Не make сообщает, а препроцессор.

> Кроме как:
> a) Выдрать тот же пакет с другого сервера.
Не поможет.

> b) Начитавшись исходников попытаться самому дописать недостающие > фрагменты исходного кода.
Абсолютно нереально.

> 2. Как выяснить почему один и тот же пакет исходников без проблем > собирается в одной системе (BlackCat6.02) и не
> компиллируется в другой (RedHat 7.2).
Потому, что в одних дистрибутивах уже установлен тот пакет,
который необходим для того, который ты компилируешь, а в других нет.

> При том, что бинарник полученный компилляцией этого пакета
> работает и там, и там.
У тебя в одном из дистрибутивов установлен только пакет с
необходимыми библиотеками, а в другом еще и -devel пакет от
соответствующих библиотек, что позволяет компилить исходники того,
что от этого пакета зависит.

Правильное для тебя решение -- взять готовый rpm, и не заниматься
самодеятельным компилением. Другой метод -- читать документацию к
пакету -- в ней обычно пишут, какие пакеты и каких версий необходимы
для установки.

asd
()

И еще рекомендую обратить внимание на configure ( а вместе с ним все что сюда относится: automake, autoconf, etc).

Good Luck!

tvn
()

2 asd

>> b) Начитавшись исходников попытаться самому дописать недостающие > фрагменты исходного кода.
>Абсолютно нереально.
Попытка не пытка (но может ею стать).

>Потому, что в одних дистрибутивах уже установлен тот пакет,
>который необходим для того, который ты компилируешь, а в других нет
Вопрос в том: как выяснить чего не хватает.

>Правильное для тебя решение -- взять готовый rpm, и не заниматься
>самодеятельным компилением. Другой метод -- читать документацию к
>пакету -- в ней обычно пишут, какие пакеты и каких версий необходимы
>для установки.

От rpm устал. А документация, увы, не во всех пакетах присутствует.
Пример: как-то собирал х-овый тетрис. Описаний - никаких. В исходниках иногда встречаются комментарии, но помогает это
слабо, ибо комментарии на французском языке. А я в нем ни дум-дум.
И этот пример, увы, не единичный.


2 tvn

Опять же, configure присутствует далеко не во всех пакетах исходников.
А про automake etc: не люблю я его. Дурная привычка - делать все ручками.

Ikonta_521
() автор топика

Отсутствие configure - и есть показатель 'правильности' диструбутива - это единственный путь проверить все зависимости при сборе из сырцов:), покрайней мере я не знаю ;)

Я согласен что autoconfig, automake, etc далеко не лутшее, особенно из-за синтаксиса (не нравится он мне и все тут, и мнение менять пока не собираюсь;)) ) но другого пути к сожалению нет (имеется ввиду нормального, когда самому не надо писать громадные программы проверки присутствия того или иного файла или либы, который в свою очередь будет сам от чего-то зависеть, чего нет...) К тому же подход в этих утилитах является портабельным в чем и является самое главное и важное преимущество

Да ты и сам спрашиваеш как выяснить что надо? configure - вот и ответ, иначе надо лазить по всем makefiles и смотреть какие либы используются, а потом в исходники - какие заголовки включены, и есть ли они в системе:(

Good Luck!

tvn
()

2 Ikonta_521 (*) (2002-03-12 10:06:15.0)Ж

>>> b) Начитавшись исходников попытаться самому дописать недостающие >> фрагменты исходного кода.
>> Абсолютно нереально.
> Попытка не пытка (но может ею стать).

Ты сам напишешь qt-devel или kde-devel которых тебе судя по
всему не хватает для сборки преферанса? Ответ -- нет.

> Потому, что в одних дистрибутивах уже установлен тот пакет,
> который необходим для того, который ты компилируешь, а в других нет
> Вопрос в том: как выяснить чего не хватает.
Пользоваться rpm или configure.

> От rpm устал. А документация, увы, не во всех пакетах присутствует.

Что значит ``от rpm устал''? Альтернативного секса захотелось?

> Пример: как-то собирал х-овый тетрис. Описаний - никаких. В
> исходниках иногда встречаются комментарии, но помогает это
> слабо, ибо комментарии на французском языке. А я в нем ни дум-дум.
> И этот пример, увы, не единичный.

Забить на такой тетрис. Этих тетрисов как грязи и среди них наверняка
встречаются нормально написанные, которые не надо править напильником перед сборкой.

> Опять же, configure присутствует далеко не во всех пакетах
> исходников.

Выкинуть нахрен такие пакеты. Во всех нормальных пакетах configure есть (во многих и .spec есть).

А про automake etc: не люблю я его. Дурная привычка - делать все ручками.

Э? А что ты ручками делаешь при компиляции пакета с automake?


asd
()

2 asd
>Что значит ``от rpm устал''? Альтернативного секса захотелось?
И его, родимого, также. А по сути - в лом отслеживать версии rpm, степень их совместимости и т. д.

>Забить на такой тетрис. Этих тетрисов как грязи и среди них наверняка
>встречаются нормально написанные, которые не надо править напильником перед сборкой.
При том, что он единственный без проблем собрался и даже весьма прилично работал. Выносить. Зачем ?

>> Опять же, configure присутствует далеко не во всех пакетах
>> исходников.
>
>Выкинуть нахрен такие пакеты. Во всех нормальных пакетах configure есть (во многих и .spec есть).

Словарь выкинуть ?.. Чтобы потом листать тоненькие книжечки, страниц так на 800 формата А4, или искать Вынь, выяснить
есть ли там словарь, работает ли он в принципе, норамально ли он работает ?.. Нет уж, увольте.

>>А про automake etc: не люблю я его. Дурная привычка - делать все ручками.
>
>Э? А что ты ручками делаешь при компиляции пакета с automake?

makefile писать ручками (ну на при данном уровне мне это пока интересно).



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

Ikonta_521
() автор топика

2 tvn

А не подскажешь, случайно, ссылочку где искать недостающие заголовочные файлы.


>Good Luck!

Взаимно.

Ikonta_521
() автор топика

2 Ikonta_521 (*) (2002-03-13 10:28:18.0): > А по сути - в лом отслеживать версии rpm, степень их совместимости > и т. д.

Дело в том, что существует всего одна версия rmp. Текущая, а если она меняется, то к ней выходит апдейты (конечно была плюха у RH при переходе на v4, но это уже в прошлом).

> При том, что он единственный без проблем собрался и даже весьма > прилично работал. Выносить. Зачем ?

Ты думаешь, что это единственный? Идем на feshmeat, запрашиваем ``tetris'' получаем 37 ссылок.

> Словарь выкинуть ?.. Чтобы потом листать тоненькие книжечки, > страниц так на 800 формата А4, или искать Вынь, выяснить > есть ли там словарь, работает ли он в принципе, норамально ли он > работает ?.. Нет уж, увольте.

А ты какой словарь имеешь в виду?

> makefile писать ручками (ну на при данном уровне мне это пока > интересно).

При использовании automake и configure ты пишешь ручками шаблоны, которые потом заполняются конкретными значениями. Этим достигается как-раз то, чего ты хочешь -- не ты должен искать какие пакеты нужны еще, это делает configure и тебе рассказывает.

> А теперь по сути вопроса: > Кто-нибудь может подсказать каким образом (т.е. подсвечноком) на > произвольной системе неопределенного возраста, > установленной в общем случае не тобой выяснить каких пакетов или > библиотек не хватает для успешной компилляции, > что необходимо обновить.

Это все достигается опытом и знанием конкретного пакета и системы под которой ты сидишь. Если препроцессор не может найти файл qmetaobject.h я знаю, что надо поставить пакет qt-devel или его аналог. Если же я уверен, что он у меня уже стоит, то я начинаю смотреть в Makefile на предмет, какие -I (и соответственно -L) флаги стоят для $(CC).

asd
()

Если я правильно понял вопрос: все заголовки лежат в основе в двух местах /usr/include/ , /usr/local/PACKET_NAME Иногда (например тот же KDE) надо смотреть в /opt/PACKET/

Но вот универсального способа зайти туда-то и посмотреть что надо нет - надо смотреть на маке (увидиш где он должен быть, -I директива :) ) и затем чего не хватает при сборке (error output from gcc/g++).

Где скачать то чего не хватает? Ну если у тебя RH - ftp.redhat.com SUSE: ftp.suse.com (Естественно - rpm)

Коли надо сами исходники без всякх rpm - рекомендую freshmeat.net

I hope it will help;)

tvn
()

2 tvn (*) (2002-03-13 11:43:57.0):

А чем тебя не устраивают дистрибутивные srpm? Авторы дистрибутивов не глупые люди, они гораздо умнее подавляющего большинства пользователей, которые пользуются их услугами.

asd
()

2 asd (*) (2002-03-13 11:51:54.0) Да устраивает, в целом ими в большинстве и пользуюсь, учитывая что там и патчи часто лежат:) Но есть большое но - не для всего есть srpm, а мне довольно часто удобно самому компилить да и без сырцов писать не очень-то;)

В целом я согласен - rpm стандарт, и проблем с ним у меня еще не было, да и удобен он, единственное не знаю утилитки которая бы сама rpm создала (типа install shield) - но это так от лени;)) все равно руками все делать буду:))

tvn
()

2 tvn (*) (2002-03-13 12:11:27.0):

> В целом я согласен - rpm стандарт, и проблем с ним у меня еще не > было, да и удобен он, единственное не знаю утилитки которая бы > сама rpm создала (типа install shield) - но это так от лени;)) все > равно руками все делать буду:))

Генератор spec'ов хочешь? :))

У меня есть спек на базе которого я все и делаю, уже и не помню, от чего он был изначально :))

asd
()

2 asd
>> При том, что он единственный без проблем собрался и даже весьма > прилично работал. Выносить. Зачем ?
>
>Ты думаешь, что это единственный? Идем на feshmeat, запрашиваем ``tetris'' получаем 37 ссылок.

Из уже скачанных, когда нет возможности выхода в Сеть (Родная декадно-шаговая АТС - no comment).

>А ты какой словарь имеешь в виду?
А можно подумать есть много вариантов.
Словарь slowo, у меня два комплекта исходников, и ни в одном из них я не встретил configure.

2 tvn
Thanks.

Ikonta_521
() автор топика

2 Ikonta_521 (*) (2002-03-13 12:36:57.0):

> Из уже скачанных, когда нет возможности выхода в Сеть (Родная > декадно-шаговая АТС - no comment).

Ну тады ой :((

> А можно подумать есть много вариантов. > Словарь slowo, у меня два комплекта исходников, и ни в одном из > них я не встретил configure.

Просто я Тоботрасовским dict пользуюсь (там, правда, configure тоже нет) http://xtalk.price.ru/mysoft.html

asd
()

2 asd

>Просто я Тоботрасовским dict пользуюсь (там, правда, configure тоже нет) http://xtalk.price.ru/mysoft.html

Ну вот, сам пользуешься, а говоришь без configure - программу на фиг.

P.S. А за ссылочку спасибо. Будет время - зайду. Интересно посмотреть.

Ikonta_521
() автор топика

2 Ikonta_521 (*) (2002-03-13 14:07:57.0):

> Ну вот, сам пользуешься, а говоришь без configure - программу на фиг.

Понимаешь, в чем дело... Там всего 392 строки кода и используется всего один внешний пакет (gdbm[-devel]) который (или его аналог) стоит практически всегда. Да и в случае каких-либо проблем я напильником доведу до ума многое. И это наверное единственный пакет без configure, которым я пользуюсь.

asd
()

2 asd
Ну, slowo.не намного сложнее, хотя, помнится, это не единственный пакет, из того, что я собирал, в котором не было configure.
Вспоминать остальное в лом. Стоит, и пусть стоит.

А про доведение до ума напильником скажу - весьма здравая идея.

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