問題描述: 在Vivado SDK中,使用了math函數庫中的三角函數,如下所示。雖然在頭部包含了“math.h”頭文件,編譯時SDK工具仍然提示找不到sin函數。
Note:其實不管是Vivado還是ISE,哪個版本的SDK使用者都可能會碰到類似的問題,有興趣的讀者可以親自試驗下。
那么這到底是什么問題呢? 其實是GCC工具鏈的庫函數默認路徑的問題。從網上搜了下,gcc的sin函數是定義在libm.so里面了。用-l選項定義指定的路徑。不填寫的話默認是/lib和/usr/lib內。因為linux下所有的函數庫都是以lib開頭的。所以除去頭和尾,那么m就是代表libm.so(m是庫名,libm.so是庫文件名)在使用“-l”參數時,通常的習慣是除去“lib”函數庫頭和后面的版本號,使用庫名和參數“-l”連接,形成“-lm”。于是,我們需要在gcc找不到庫時,可是使用“-l”直接給定庫名。 雖然我們可能是裸跑的程序,但也是適用上述解釋的。
解決辦法: 需要在C/C++Build Settings中加上'm'選項:
參考:AR#52971 14.4 - SDK - ARM Compiler isfailing with applications containing sin, cos, tan functions in SDK |
新聞熱點
疑難解答