информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеАтака на InternetПортрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / software
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ошибки при компиляции 03.03.03 12:59  Число просмотров: 1166
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> raduse.c:536:29: warning: pasting "->" and "port" does
> not give a valid preprocessing token
На это в общем случае можно забить...

> screen.c: In function 'init_termap':
> screen.c:223: warning: assignment makes pointer from
> integer without a cast
Это уже хуже, и если посмотреть ниже, то становится почти понятно, где ножницы.

> ...
> screen.c: In function 'restore_screen':
> screen.c:279: warning: comparsion between pointer and
> integer
> ...
> /usr/bin/ld: cannot find -ltermcap
О!

> Суть вопроса: товарищи, в чем грабли?
Грабли - в том, на что обиделся линкер, по-русски - не могу найти библиотеку termcap.

> И как это безобразие побороть?
Поставить termcap :) Либо (тоже не исключаю) termcap у тебя стоит в каком-то неожиданном для линкера месте. Тогда это надо объяснить в опциях компилятору (configure?)

> Приведу на случай дополнительные данные:
> ОС Linux из дистрибутива Mandrake 8.2;
> ядро свое, 2.4.20 свеженькое, прямо с kernel.org;
> компилятор gcc v2.96 из дистрибутива;
> GNU make v3.79.1 тоже из дистрибутива;
> памяти мнго, дискового пространства очень много. Проц
> мощен, кулер быстр.
<software>
Ошибки при компиляции 03.03.03 11:51  
Автор: neereah Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Доброго времени суток!
Как обычно - прихожу в форум со своими проблемами. Очередная состоит в следующем.
Описание:
мне потребовалось установить на машину новую версию RADIUS'а (GNU RADIUS вместо Open RADIUS), но ничего не получилось, потому как программа не скомпилировалась. На стадии компиляции появились ошибки. Вот некоторые из них:

raduse.c:536:29: warning: pasting "->" and "port" does not give a valid preprocessing token
...
screen.c: In function 'init_termap':
screen.c:223: warning: assignment makes pointer from integer without a cast
...
screen.c: In function 'restore_screen':
screen.c:279: warning: comparsion between pointer and integer
...
/usr/bin/ld: cannot find -ltermcap
collect2: ld returnet 1 exit status
...

Самое противное, что RADIUS - не первая программа, которая отказывается компилироваться. Например, как-то раз не смог откомпилить одну из версий ppd (какую точно - не помню).
Суть вопроса: товарищи, в чем грабли? Является ли это какй-то особенностью конкретной компилируемой программы, или же это недостаток во всей системе? И как это безобразие побороть?
Приведу на случай дополнительные данные:
ОС Linux из дистрибутива Mandrake 8.2;
ядро свое, 2.4.20 свеженькое, прямо с kernel.org;
компилятор gcc v2.96 из дистрибутива;
GNU make v3.79.1 тоже из дистрибутива;
памяти мнго, дискового пространства очень много. Проц мощен, кулер быстр.
Ошибки при компиляции 03.03.03 12:59  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> raduse.c:536:29: warning: pasting "->" and "port" does
> not give a valid preprocessing token
На это в общем случае можно забить...

> screen.c: In function 'init_termap':
> screen.c:223: warning: assignment makes pointer from
> integer without a cast
Это уже хуже, и если посмотреть ниже, то становится почти понятно, где ножницы.

> ...
> screen.c: In function 'restore_screen':
> screen.c:279: warning: comparsion between pointer and
> integer
> ...
> /usr/bin/ld: cannot find -ltermcap
О!

> Суть вопроса: товарищи, в чем грабли?
Грабли - в том, на что обиделся линкер, по-русски - не могу найти библиотеку termcap.

> И как это безобразие побороть?
Поставить termcap :) Либо (тоже не исключаю) termcap у тебя стоит в каком-то неожиданном для линкера месте. Тогда это надо объяснить в опциях компилятору (configure?)

> Приведу на случай дополнительные данные:
> ОС Linux из дистрибутива Mandrake 8.2;
> ядро свое, 2.4.20 свеженькое, прямо с kernel.org;
> компилятор gcc v2.96 из дистрибутива;
> GNU make v3.79.1 тоже из дистрибутива;
> памяти мнго, дискового пространства очень много. Проц
> мощен, кулер быстр.
Почти помогло, но... 03.03.03 17:02  
Автор: neereah Статус: Незарегистрированный пользователь
<"чистая" ссылка>
...проблема осталась.
В первую очередь спасибо за ответ.
Эта ошибка исчезла. И хотя из текста я догадывался, что дело в отсутствии библиотеки termcap, но тем не менее до иеня не дошло, что линкер просто не может ее найти. Но оставшаяся часть ошибок (я не привел их все сразу) таки ставит меня в тупик.
Текст (время компиляции):

Данный источник (в скобках приведены значения "In function:")

md5crypt
rscm_utmp (rad_utmp_putent)
rscm_lib (scm_makenum)
rscm_rewrite (rad_rewrite_execute_string, rad_rewrite_execute)

Выдал мне следующие предупреждения:
warning: return makes pointer from integer without a cast
warning: passing arg 1 of 'scm_cons2' makes pointer from integer without a cast

Далее идут ошибки, окончательно приведшие к прерыванию процесса компиляции:
./libradscnm.a(rscm_lib.o): In function 'scm_makenum':
/root/src/gnu-radius-0.96.4/radscm/rsc_lib.c:39: undefined reference to 'scm_long2big'
colect2: ld returned 1 exit status
make[2]:*[radscm] Error 1
make[1]:*[all-recursive] Error 1
make:*[all-recursive-am] Error2

Буду признателен, если кто-нибудь сможет вкратце объяснить не только суть конкретной проблемы (как таки заставить наконец скомпилиться RADIUS), но и в общих чертах, как диагностировать подобные проблемы во время компиляции других программ. Поясню свою мысль: например, если в предыдущем случае компилятор выдавал сообщение "could nt find..." то даже не являясь програмистом можно понять, в чем тут причина. А вот следующие тексты ошибок я навскидку "расшифровать" для себя не могу. Может есть какие-то хелпы-факи-мануали, где этот вопрос рассмотрен подробнее?
По-моему, почти то же самое 03.03.03 17:33  
Автор: Ktirf <Æ Rusakov> Статус: Elderman
<"чистая" ссылка>
> warning: return makes pointer from integer without a cast
> warning: passing arg 1 of 'scm_cons2' makes pointer from
> integer without a cast
Подобные предупреждения в C-шном (не C++-ном) коде меня обычно заставляют думать, что не хватает каких-то библиотек или include'ов. Причем configure их не нашел и поэтому в сборку не включил, из серии а вдруг сойдет.

> Далее идут ошибки, окончательно приведшие к прерыванию
> процесса компиляции:
> ./libradscnm.a(rscm_lib.o): In function 'scm_makenum':
> /root/src/gnu-radius-0.96.4/radscm/rsc_lib.c:39: undefined
> reference to 'scm_long2big'
Я затрудняюсь определить, какой библиотеки не хватает (не работал с RADIUS никогда), но процентов на 80% уверен, что проблема опять в том, что линкер не видит очередной библиотеки, в которой, собственно, и определена функция scm_long2big.

> Буду признателен, если кто-нибудь сможет вкратце
> объяснить не только суть конкретной проблемы (как таки
> заставить наконец скомпилиться RADIUS), но и в общих
> чертах, как диагностировать подобные проблемы во время
> компиляции других программ. Поясню свою мысль: например,
> если в предыдущем случае компилятор выдавал сообщение
> "could nt find..." то даже не являясь програмистом можно
> понять, в чем тут причина. А вот следующие тексты ошибок я
> навскидку "расшифровать" для себя не могу. Может есть
> какие-то хелпы-факи-мануали, где этот вопрос рассмотрен
> подробнее?
Честно говоря, я не видел, чтобы эти предупреждения где-то описывались (плохо смотрел, может быть). Так или иначе, но как я выше уже написал, предупреждения о неявном приведении типа из int чаще всего свидетельствуют о том, что не хватает каких-то библиотек+include'ов. Чаще всего после этих предупреждений идут ошибки, которые точно указывают, чего не хватает. И чаще всего эти ошибки выдатся линкером, а не компилятором.

Что с этим делать? Выяснять, чего не хватает. Уже не помню, что собирал, но когда сборка закончилась с похожим результатом, я решил заглянуть в исходники в том месте, в котором было выдано предупреждение. К моему приятному удивлению, автор рядом с этим местом написал, что если я испытываю именно такие симптомы, то вероятнее всего, configure не обнаружил termcap (совпадение - в моем случае тоже был termcap). Может, и в исходниках Радиуса тоже что-то написано об этом? :)
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach