Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译

问题描述:
在Vivado SDK中,使用了math函数库中的三角函数,如下所示。虽然在头部包含了“math.h”头文件,编译时SDK工具仍然提示找不到sin函数。
Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第1张图片
Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第2张图片
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
Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第3张图片

Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第4张图片
Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第5张图片
Xilinx SDK 编译包含有sin, cos, or tan 等数学函数时如何成功编译_第6张图片

你可能感兴趣的:(FPGA)