2009-01-20 91 views
1

我正在观察一些我发现很难推理的行为。动态链接错误

我有一段代码如下:

int timer_temp_var; 

if ((timer_temp_var/1000.0) > 5.0) 
{ 
    //Do something 
} 

这片导致链接错误。

> 
> dld: warning: Undefined symbol _d_fle" 
> dld: no output written make[1]: *** 
> [app.elf] Error 1 

但在更换平等检查为:

if ((timer_temp_var/1000.0) < 5.0) // replace '>' with '<'. 

我看不出有什么问题。

此外,而不是由1000.0做除法,如果我用1000做如下:

if ((timer_temp_var/1000) > 5) 
    { 
     //Do something 
    } 

我看不出问题,无论那种平等检查的。

该应用程序被编译为在pSOS操作系统上运行。

这种行为的原因是什么?

+0

你有没有尝试转储生成的汇编代码,看看是否奇怪是开发? – dsm 2009-01-20 15:14:12

回答

2

似乎你的编译器用_d_fle()函数替代了“>”运算符,所以你需要将一些库链接到你的可执行文件。

令人惊讶的是,“<”起作用,尽管它应该被d_fgt()函数取代,该函数最有可能位于同一个库中。

100.0更改为100使“>”整数的左操作数,它似乎整数比较不需要任何函数调用 - 可能它被编译为CPU指令而不是函数调用。

编辑:看起来像你需要SFPE(软件浮点模拟)库。你有什么像libsfpe?

1

从1000.0到1000的变化表明浮点运算的问题。尝试将1000.0转换为(int)并查看是否有任何进展。

更改标志<到>声音不合理导致的任何变化......

1

你缺少一个浮点库。尝试包括数学库(libm.a),看看是否有窍门。