2013-12-08 78 views
2

希望以前有人看到過,並能提供一些見解。C sinhl在包含math.h和鏈接libm時未定義參考

我包括math.h和鏈接libm,在FreeBSD 9.2 x86_64上使用gcc 4.2.1。

像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 

編譯嘗試導致:

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列出同樣的方式。只是爲了嘲笑我試圖鏈接到libm的32位版本,這讓我無處可尋。有趣的是,如果我看看/usr/include/libm.a中的符號,我會看到sinl的東西,但是沒有看到sinhl的東西。我是否需要鏈接其他庫以使用雙曲線三角函數?

在過去的24小時裏,我一直在不停地打開和關閉,沒有看到任何明顯的東西。我也遇到了相同的問題,還有其他一些功能:coshl,tanhl,logl,log2l,log10l,expl。

來自一組新的眼睛的任何想法?

預先感謝您。 -T

+0

嘗試在FreeBSD工作站的終端提示符處鍵入'man sinhl' –

+1

感謝答覆Giovanni。有趣的是,我從「man sinhl」沒有得到任何回報,但「man sinl」確實返回了文檔。 嗯...沒有安裝東西。搜索我現在可能安裝的東西。 – TCCSE

+2

@Giovanni Lombardo:謝謝你讓我思考完全從操作系統漏掉的函數的軌跡。非常感激。 解決方案是爲缺少的數學函數安裝「libmissing」。 其他任何人,運行到它: - 安裝在/ usr /港口/數學/ libmissing - 爲missing_math.h添加的#include到你的代碼。 - 更新Makefile以包含libmissing的路徑和鏈接: gcc -I/usr/local/include -L/usr/local/lib -o test test.c -lm -lmissing – TCCSE

回答

1

@Giovanni Lombardo:謝謝你讓我想起完全從操作系統中遺漏的函數的軌跡。非常感激。

解決方案是爲缺少的數學函數安裝「libmissing」。

其他任何人,運行到它:

  • 安裝在/ usr /港口/數學/ libmissing

  • 爲missing_math.h添加的#include到你的代碼。

  • 更新Makefile以包括路徑和鏈接的libmissing:
    GCC -I在/ usr /本地/ -L包括在/ usr/local/lib目錄-o測試test.c的-lm -lmissing