Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ryabinkin Гость
|
Добавлено: Пт Июл 18 2003 21:25 Заголовок сообщения: trigonometry in Linux |
|
|
I have written the simplest program on C:
#include
int main(void) { sin(3.14e0/2e0); return 0; }
But during the compile I receive: /tmp/cchTGMJE.o: In function `main': /tmp/cchTGMJE.o(.text+0x14): undefined reference to `sin' collect2: ld returned 1 exit status
Where is bug? Linux RH 7.2 gcc 2.96 |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://prof Гость
|
Добавлено: Вс Июл 20 2003 14:48 Заголовок сообщения: Форум съел, что за недер ты инклюдишь. Надо math.h |
|
|
Очень полезно сделать grep 'sin' /usr/include/* и посмотреть, какие хедеры отвечают за синусы.
А может, надо указывать линкуемую библиотеку - опций не помню, читай 'man gcc'. |
|
Вернуться к началу |
|
|
ryabinkin Гость
|
Добавлено: Вс Июл 20 2003 17:38 Заголовок сообщения: Re: Форум съел, что за недер ты инклюдишь. Надо math.h |
|
|
Da, podkluchal math.h i iskal vse vkhozhdeniya, tol'ko nemnogo ne tak:
find /usr/include -type f -exec grep -H '\bsin[a-z]*(' {} \; >> results no nichego interesnogo:
/usr/include/freetype2/freetype/fttrigon.h: * the value of "vec.x" will be "sin(theta)", and the value of "vec.y" /usr/include/tgmath.h:#define sin(Val) __TGMATH_UNARY_REAL_IMAG (Val, sin, csin) /usr/include/tgmath.h:#define sinh(Val) __TGMATH_UNARY_REAL_IMAG (Val, sinh, csinh) /usr/include/g++-v3/bits/std_cmath.h: sin(float __x) /usr/include/g++-v3/bits/std_cmath.h: sin(long double __x) /usr/include/g++-v3/bits/std_cmath.h: sinh(float __x) { return ::sinhf(__x); } /usr/include/g++-v3/bits/std_cmath.h: sinh(float __x) { return ::sinh(static_cast(__x)); } /usr/include/g++-v3/bits/std_cmath.h: sinh(long double __x) { return ::sinhl(__x); } /usr/include/g++-v3/bits/std_cmath.h: sinh(long double __x) { return ::sinh(static_cast(__x)); } /usr/include/g++-v3/bits/std_complex.h: template complex sin(const complex&); /usr/include/g++-v3/bits/std_complex.h: template complex sinh(const complex&); /usr/include/g++-v3/bits/std_complex.h: { return complex(__rho * cos(__theta), __rho * sin(__theta)); } /usr/include/g++-v3/bits/std_complex.h: return complex(cos(__x) * cosh(__y), -sin(__x) * sinh(__y)); /usr/include/g++-v3/bits/std_complex.h: return complex(cosh(__x) * cos(__y), sinh(__x) * sin(__y)); /usr/include/g++-v3/bits/std_complex.h: sin(const complex& __z) /usr/include/g++-v3/bits/std_complex.h: return complex(sin(__x) * cosh(__y), cos(__x) * sinh(__y)); /usr/include/g++-v3/bits/std_complex.h: sinh(const complex& __z) /usr/include/g++-v3/bits/std_complex.h: return complex(sinh(__x) * cos(__y), cosh(__x) * sin(__y)); /usr/include/g++-v3/bits/std_complex.h: return sin(__z) / cos(__z); /usr/include/g++-v3/bits/std_complex.h: return sinh(__z) / cosh(__z); /usr/include/octave-2.1.34/octave/pt-plot.h: // command "plot sin(x), cos(x)" has two subplot commands.
Chto dal'she? |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://prof Гость
|
Добавлено: Вс Июл 20 2003 20:10 Заголовок сообщения: А на каком этапе это выдается - компиляция, линкоавка или запуск? |
|
|
В math.h, судя по приведенному результату поиска, синуса нет. А загружает ли он синус? Надо смотреть, что инклюдит math.h и доходит ли это до tgmath.h или до другого хедера, содержащего определение синуса.
Ну а еще мне хотелось бы узнать, на каком этапе работы выдается ошибка. Судя по отсутствию номера строкИ, это происходит либо при линковке, либо во время выполнения. Возможно, системная библиотека не содержит математики, так что ее надо ставить отдельно. Или, возможно, надо статически линковать библиотеку к программе. Боюсь, что дальше я помочь не смогу, ибо рабротаю с FreeBSD. |
|
Вернуться к началу |
|
|
ryabinkin Гость
|
Добавлено: Вс Июл 20 2003 20:33 Заголовок сообщения: Re: А на каком этапе это выдается - компиляция, линкоавка или запуск? |
|
|
Esli ya pravil'no ponyal, to oshibka - eto oshibka etapa komponovki. Ne sozdaetsya ispolnyaemyi fail.
Samoe interesnoe, esli analogichnuyu programmu kompilit' g++, to vsey OK.
Tak gde zhe grabli???? |
|
Вернуться к началу |
|
|
Борис Гость
|
Добавлено: Пн Июл 21 2003 11:01 Заголовок сообщения: Re: А на каком этапе это выдается - компиляция, линкоавка или запуск? |
|
|
-- Кто виноват? -- g++ (компилятор си++) и gcc (компилятор си), вероятно, используют разный набор библиотек по умолчанию. В твоем случае линковщик не находит в списке линкуемых модулей файл tgmath.o (или аналогичный).
-- Что делать? -- Поищи, в каком .c-файле содержится код функции sin(), и запиши его в командной строке вместе с твоей программой (gcc твоя-программа.c файл-с-синусом.c) или вставь в Makefile верным образом. |
|
Вернуться к началу |
|
|
|