使用 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.
我正在使用 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.