2009-01-20 24 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),看看是否有竅門。