我在Raspberry PI中遇到pow()问题。我使用它,只需像这样转动gpio引脚:
*((unsigned int *)(GPIO_PIN_ON)) = ( 1 * pow(2,16) ); // 1 << 16
GPIO_PIN_ON是我定义在顶部的常量。这很好用。我甚至不需要包含“Math.h”,但是当我在其他文件中创建“GPIOsetFunction()”并使用pow()时甚至使用“math.h”库它会给我这个错误:
gpio.c:(.text+0x38): undefined reference to `__aeabi_i2d'
gpio.c:(.text+0x48): undefined reference to `__aeabi_i2d'
>> gpio.c:(.text+0x64): undefined reference to `pow'
gpio.c:(.text+0x80): undefined reference to `__aeabi_dmul'
gpio.c:(.text+0x94): undefined reference to `__aeabi_d2iz'
这里表明pow()是未定义的。有人可以帮帮我吗。
P.S:我正在将BakingPI教程从Assembly转换为C,我不想使用Shift运算符。
下面是我没有“math.h”而没有“-lm”成功运行的代码,如果“-lm”是解决方案,我怎么能运行它? (这是BAKING-PI教程的OK-02的完整代码)
P.S2:我正在使用YAGARTO编译器。
#include <sys/types.h>
void main(void);
#define GPIO_BASE 538968064 //0x20200000
#define GPIO_PIN_FUNC (GPIO_BASE+4)
#define GPIO_PIN_ON (GPIO_BASE+28)
#define GPIO_PIN_OFF (GPIO_BASE+40)
void main(void) {
register int counter = 0;
*((unsigned int *)(GPIO_PIN_FUNC)) = ( 1 * pow(2,18) ); //1 << 18
while (1 == 1) { // forever
*((unsigned int *)(GPIO_PIN_OFF)) = ( 1 * pow(2,16) ); //1 << 16
counter = 4128768; //0x3f0000;
while (counter--);
*((unsigned int *)(GPIO_PIN_ON)) = ( 1 * pow(2,16) ); // 1 << 16
counter = 4128768; //0x3f0000;
while (counter--);
}
// should never get here
}
答案 0 :(得分:1)
您必须与数学库链接。将-lm
附加到编译(链接)命令行。