C++ Atmel Studio:未定义对“u read';

C++ Atmel Studio:未定义对“u read';,c++,linker-errors,atmelstudio,C++,Linker Errors,Atmelstudio,我开始在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-m\libc.a(lib_a-readr.o): In function `_read_r': C:\Users\Administrator

我开始在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-m\libc.a(lib_a-readr.o): 
In function `_read_r':
    C:\Users\Administrator\Documents\myproj\Debug\readr.c(1,1): error: undefined reference to `_read'

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

最初的答案来自

现在的情况是,内置的
\ucxa\upure\uvirtual
默认通过
printf
使用
\u read
\u write
。要修复此问题,请显式定义该处理程序以执行其他操作

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

最初的答案来自

现在的情况是,内置的
\ucxa\upure\uvirtual
默认通过
printf
使用
\u read
\u write
。要修复此问题,请显式定义该处理程序以执行其他操作

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

在我的例子中,我将其追溯到asf Definiting assert()的一个问题,该问题在project compile\link符号中未定义“NDEBUG”时无效

具体来说,

  • 项目属性->工具链->ARM\GNU C编译器->符号:将NDEBUG添加为-D“已定义符号”
  • 项目属性->工具链->ARM\GNU预处理汇编程序->符号:将NDEBUG添加为-D“已定义符号”

在我的例子中,我将其追溯到asf Definiting assert()的一个问题,当项目compile\link符号中未定义“NDEBUG”时,该问题是无效的

具体来说,

  • 项目属性->工具链->ARM\GNU C编译器->符号:将NDEBUG添加为-D“已定义符号”
  • 项目属性->工具链->ARM\GNU预处理汇编程序->符号:将NDEBUG添加为-D“已定义符号”

在我的例子中,这个问题与项目配置的链接器设置有关

通过将链接器设置“附加规范”设置为“使用系统调用存根(-Specs=nosys.Specs)”,可以为posix系统调用(如读和写)提供空的系统调用实现

这些设置位于下

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

在我的例子中,这个问题与项目配置的链接器设置有关

通过将链接器设置“附加规范”设置为“使用系统调用存根(-Specs=nosys.Specs)”,可以为posix系统调用(如读和写)提供空的系统调用实现

这些设置位于下

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