希望以前有人看到過,並能提供一些見解。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
嘗試在FreeBSD工作站的終端提示符處鍵入'man sinhl' –
感謝答覆Giovanni。有趣的是,我從「man sinhl」沒有得到任何回報,但「man sinl」確實返回了文檔。 嗯...沒有安裝東西。搜索我現在可能安裝的東西。 – TCCSE
@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