2013-12-08 6 views
2

누군가가 이것을 보았고 약간의 통찰력을 제공 할 수 있습니다.C sinhl math.h를 포함하고 libm을 링크 할 때 정의되지 않은 참조

FreeBSD 9.2 x86_64에서 gcc 4.2.1을 사용하여 libm을 링크하고 math.h를 포함하고 있습니다.

sinl, cosl, tanl과 같은 기능을하지만, 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); 
} 

메이크 재료 :

all: 
     gcc -o test test.c -lm 

컴파일 시도 결과 : 나는 math.h 및 sinl 및 sinhl 모두 확인

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' 

가 나열된 같은 길. 그냥 웃어 넘기려고 libm의 32 비트 버전과 연결해 봤는데 아무데도 없어.

흥미롭게도, 내가 /usr/include/libm.a에있는 심볼을 보면 sinl에 대해서는 아무것도 보이지만 sinhl에 대해서는 아무것도 볼 수 없다. 쌍곡선 삼각 함수를 사용하려면 다른 라이브러리를 링크해야합니까?

저는 지난 24 시간 동안 아무것도 눈치 채지 않고이 기능을 켜고 껐습니다. 나는 꽤 많은 다른 기능들에 대해서도 동일한 문제를 경험한다 : coshl, tanhl, logl, log2l, log10l, expl.

눈에서 나온 아이디어가 있습니까?

미리 감사드립니다. -T

+0

FreeBSD 워크 스테이션의 터미널 프롬프트에 'man sinhl'을 입력 해보십시오. –

+1

Giovanni 님의 답장을 보내 주셔서 감사합니다. 흥미롭게도 나는 "man sinll"에서 아무것도 얻지 못했지만 "man sinl"은 문서를 반환합니다. 흠 ... 뭔가 설치되지 않았습니다. 잠재적으로 설치할 수있는 무언가를 찾고 있습니다. – TCCSE

+2

@ 지오바니 롬 바르도 (Giovanni Lombardo) : OS에서 완전히 빠진 기능 추적에 대해 생각해 줘서 고맙습니다. 매우 감사. 해결 방법은 누락 된 수학 함수에 대해 "libmissing"을 설치하는 것입니다.다른 사람들을위한 그것으로 실행 : - libmissing /는/usr/포트/수학 설치 - 코드에 missing_math.h의 #INCLUDE를 추가합니다. - 경로를 포함하고 libmissing을 링크하도록 Makefile을 업데이트하십시오. gcc -I/usr/local/include -L/usr/local/lib -o test test.c -lm -lmissing – TCCSE

답변

1

@ 지오 바니 롬 바르도 (Giovanni Lombardo) : OS에서 완전히 누락 된 기능 추적을 생각해 주셔서 감사합니다. 매우 감사.

해결책은 누락 된 수학 함수에 대해 "libmissing"을 설치하는 것이 었습니다.

  • 설치는/usr/포트/수학/

  • 이 코드에 missing_math.h의 #INCLUDE 추가 libmissing : 그것으로 실행하는 다른 사람들을위한

    .
    GCC의 -I/usr/지방/-lmissing -L/usr/local/lib 등의 -o 테스트 TEST.C의 -lm을 포함

:

  • 업데이트 메이크 파일의 경로와 libmissing에 대한 링크를 포함하는