Bug 15584

Summary: линкер ругается на cos() , -lm не помогает
Product: Sisyphus Reporter: Yan <yantux>
Component: gccAssignee: Vitaly Lipatov <lav>
Status: CLOSED NOTABUG QA Contact: qa-sisyphus
Severity: critical    
Priority: P5 CC: glebfm, ldv, yantux
Version: unstable   
Hardware: all   
OS: Linux   

Description Yan 2008-05-09 20:51:24 MSD
Добрый день, всех с праздником.

Вроде пишу простую прогу с использованием функции cos() подключаю библиотеку для
линковки -lm , она вроде бы на месте в /lib/libm.so версия 2.5.1, если я
правильно понял. Однако линкер говорит, что не знает откуда взять cos()

вопрос - какую библиотеку надо подсовывать линкеру, чтобы он корректно линковал
прогу? Вроде раньше таких чудес не было?

Дистриб altlinux обновлённый sisyphus
Steps to Reproduce:
#include <stdio.h>
#include <math.h>

int main( void ) {

long double  a = 0, b = 0;

printf( "cos=%f\n", cos( a ) );

return( 0 );
}

gcc -lm ./math.c
Actual Results:  
/home/yan/tmp/cclkOCdt.o: In function `main':
math.c:(.text+0x53): undefined reference to `cos'
collect2: выполнение ld завершилось с кодом возврата 1


Expected Results:  
Ожидается корректная линовка
Comment 1 Andrey Rahmatullin 2008-05-09 21:01:14 MSD
gcc ./math.c -lm

http://freesource.info/wiki/AltLinux/Sisyphus/devel/UpStream/AsNeeded
Comment 2 Yan 2008-05-10 13:05:47 MSD
Проблема решена:
http://www.linux.org.ru/view-message.jsp?msgid=2729273&nocache=-961368719#2730362

-lm надо ставить в конце, не понятно почему так, вроде раньше такого не встечал
Comment 3 Mikhail Gusarov 2008-05-10 13:30:20 MSD
(In reply to comment #2)

> -lm надо ставить в конце, не понятно почему так, вроде раньше такого не 
встечал

Комментарий #1 читать отказываемся принципиально?
Comment 4 Yan 2008-05-10 13:36:22 MSD
уже всё прочитал, всем спасибо
Comment 5 Yan 2008-05-10 13:41:22 MSD
первый комме5нт кстати мне на почту не пришёл, не баг случайно?

а настройка очень жёсткая, очень ловко вывела меня в ступор
Comment 6 Yan 2008-05-10 13:46:53 MSD
Вообще это не правильно!

Есть ключ -lm, если его нельзя ставить вначале, то линкер должен хотябы
ругнуться на его прекратить линковку! А то получается что он его корректно
проглатывает, как будто бы всё нормально, но на самом деле не использует -lm и
продолжает линковку как ни чём не бывало. Самостоятельно разобраться в причине
ошибки практически не реально.
Comment 7 Mikhail Gusarov 2008-05-10 14:54:32 MSD
(In reply to comment #5)
> первый комме5нт кстати мне на почту не пришёл, не баг случайно?

Бесплатные почтовые сервисы славятся тем, что глотают почту из открытых 
проектов, ошибочно принимая её за спам.
Comment 8 Mikhail Gusarov 2008-05-10 14:55:55 MSD
(In reply to comment #6)

> Есть ключ -lm, если его нельзя ставить вначале, то линкер должен хотябы
> ругнуться на его прекратить линковку! А то получается что он его корректно
> проглатывает, как будто бы всё нормально,

А всё нормально.

gcc a.c -lm b.c -lfoobar - вполне корректная ситуация.

ps: перевесил на компонент gcc, дабы больше lav@ не спамить.
Comment 9 Yan 2008-05-10 15:00:32 MSD
папочка спам - пустая, я имею ввиду не папочку почтового клиента, я захожу в
почту через web сервис