使用 sprintf() 时对 __mulhi3 的未定义引用 - Windows 上 Code::Blocks 中的 AVR GCC

Undefined reference to __mulhi3 when using sprintf() - AVR GCC in Code::Blocks on Windows

我正在使用 Code::Blocks 和来自 Microchip (Atmel) 的 AVR-GCC 工具链。我正在尝试为 Atmega32 编译程序。当我尝试编译使用 sprintf() 函数的程序时,我得到 "Undefined reference to __mulhi3"。没有这个功能我就不会出错。在 Atmel Studio 中或在 Linux 下的 Code::Blocks 中编译的相同程序运行良好。

#include <avr/io.h>
#include <stdio.h>

int main(void)
{
    char buf[20];
    sprintf(buf, "Hello %d", 1);

    while(1);
    return 0;
}

问题是由 GNU GCC Compiler for AVR 的 Code::Blocks 默认设置引起的 - C:/WinAVR/avr/lib 没有不必要的包含路径。你应该去

Settings → Compiler... → GNU GCC Compiler for AVR → Search directiories → Linker

并清除包含路径列表。如果列表不为空,linker tries to link against wrong version of library.