Atmel Studio:未定义对"_read"的引用

Atmel Studio: undefined reference to `_read'

本文关键字:read 引用 Studio 未定义 Atmel      更新时间:2023-10-16

我开始使用Atmel Studio收到以下链接器错误:

c:/program files (x86)/atmel/studio/7.0/toolchain/arm/arm-gnu-toolchain/bin/../lib/gcc/arm-none-eabi/6.3.1/../../../../arm-none-eabi/lib/thumb/v7e-mlibc.a(lib_a-readr.o): 
In function `_read_r':
    C:UsersAdministratorDocumentsmyprojDebugreadr.c(1,1): error: undefined reference to `_read'

这是在我向项目中添加了virtual方法后发生的。发生了什么?

在我的情况下,此问题与项目配置的链接器设置有关。

通过设置链接器设置"附加规格"to'使用Syscall Stubs(-specs = nosys.specs(&quort;

这些设置位于

Project Properties -> Toolchain -> ARM/GNU Linker -> General -> Additional Specs

最初从此网站提取的答案。

正在发生的事情是,内置的__cxa_pure_virtual默认值通过printf使用_read_write。要修复,明确定义该处理程序做其他事情。

extern "C" void __cxa_pure_virtual();
extern "C" void __cxa_pure_virtual() { 
    // Add custom handler here
    while(1); 
}

在我的情况下,我将其追溯到ASF定义servert((的问题时,当'ndebug''在项目编译 link符号中未定义时无效。

特别是

  • 项目属性 ->工具链 -> arm gnu c compiler->符号:添加ndebug作为-d'定义符号'。
  • 项目属性 ->工具链 -> ARM GNU预处理组件 ->符号:添加ndebug作为-d'定义符号'。