2013-12-08 8 views
2

Надеясь, что кто-то видел это раньше и может дать некоторое представление.C sinhl undefined reference при включении math.h и ссылки libm

Я включаю math.h И ссылку libm, используя gcc 4.2.1 на FreeBSD 9.2 x86_64.

Такие функции, как sinl, cosl, tanl work, но как только я вызываю sinhl и тому подобное, я получаю предупреждения о неявных объявлениях встроенных и ошибок для неопределенных ссылок.

Соответствующий раздел заголовка:

#include <math.h> 
#include <stdlib.h> 

// .... 

long double function0(long double inValue) 
{ 
    // Sine long double == sinl 
    return sinl(inValue); 
} 

// .... 

long double function3(long double inValue) 
{ 
    // Hyperbolic Sine long double == sinhl 
    return sinhl(inValue); 
} 

Makefile Материал:

all: 
     gcc -o test test.c -lm 

Compile попытка приводит:

function_references.h: In function 'function3': 
function_references.h:39: warning: incompatible implicit declaration of built-in function 'sinhl' 
/tmp//ccSpynxE.o: In function `function3': 
test.c:(.text+0x98): undefined reference to `sinhl' 

я проверил math.h и как sinl и sinhl перечислены так же. Просто для усмешек я попытался связать с 32-битной версией libm, которая ни к чему не привела меня.

Интересно, если я посмотрю на символы в /usr/include/libm.a, я вижу вещи для sinl, но ничего для sinhl. Нужно ли связать другие библиотеки с гиперболическими функциями?

Я уже в течение последних 24 часов выхожу из-за этого, не видя ничего очевидного. Я испытываю ту же проблему и для многих других функций: coshl, tanhl, logl, log2l, log10l, expl.

Любые идеи из свежего набора глаз?

Заранее спасибо. -T

+0

попробуйте ввести 'man sinhl' в командной строке вашего рабочего стола FreeBSD –

+1

Спасибо за ответ Giovanni. Интересно, что я ничего не получаю от «человека силь», но «человек грешник» возвращает документацию. Хммм ... что-то не установлено. Поиск чего-то, что я мог бы установить сейчас. – TCCSE

+2

@Giovanni Lombardo: Спасибо, что задумался о том, что функция полностью отсутствует из ОС. Очень признателен. Решением было установить «libmissing» для отсутствия математических функций. Для тех, кто еще, что впадает в него: - Установка/USR/порты/математика/libmissing - Добавьте #include для missing_math.h в код. - Обновить Makefile, чтобы включить путь и ссылку для libmissing: gcc -I/usr/local/include -L/usr/local/lib -o test test.c -lm -lmissing – TCCSE

ответ

1

@Giovanni Lombardo: спасибо, что задумался о том, что функция полностью отсутствует из ОС. Очень признателен.

Решение было установить «libmissing» для отсутствия математических функций.

Для любого другого, который впадает в него:

  • Установка/USR/порты/математика/libmissing

  • Добавьте #include для missing_math.h в код.

  • Обновление Makefile, чтобы включить путь и для связывания libmissing:
    GCC -I/USR/местные/включают -L/USR/местные/Библиотека тестовый -o test.c -lm -lmissing