我正在观察一些我发现很难推理的行为。
我有一段代码如下:
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,也不是除以 1000.0:
if ((timer_temp_var/1000) > 5)
{
//Do something
}
无论哪种相等性检查,我都看不到任何问题。
应用程序被编译为在 pSOS 操作系统上运行。
这种行为的原因是什么?
最佳答案
似乎您的编译器用调用 _d_fle()
函数替换了“>”运算符,因此您需要将一些库链接到您的可执行文件。
令人惊讶的是,“<”可以正常工作,尽管它应该被替换为最有可能位于同一库中的 d_fgt()
函数。
从 100.0
更改为 100
使“>”整数的左操作数看起来整数比较不需要任何函数调用 - 可能它被编译为 CPU 指令而不是函数调用。
编辑:看起来您需要 SFPE(软件浮点仿真)库。你有类似 libsfpe 的东西吗?
关于c - 动态链接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/461655/