Atmel Studio:对“_read”的未定义引用
Atmel Studio: undefined reference to `_read'
我开始在 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
方法后发生的。这是怎么回事?
答案最初来自 this site。
发生的事情是内置 __cxa_pure_virtual
默认使用 _read
和 _write
通过 printf
。要修复,请显式定义该处理程序以执行其他操作。
extern "C" void __cxa_pure_virtual();
extern "C" void __cxa_pure_virtual() {
// Add custom handler here
while(1);
}
在我的例子中,我将其追溯到当项目 compile\link 符号中未定义 'NDEBUG' 时 asf 将 assert() 定义为无效内容的问题。
具体来说,
- 项目属性->工具链->ARM\GNU C 编译器->符号:将 NDEBUG 添加为 -D 'defined symbol'.
- 项目属性->工具链->ARM\GNU 预处理汇编器->符号:添加 NDEBUG 作为 -D 'defined symbol'.
就我而言,这个问题与项目配置的链接器设置有关。
通过将链接器设置“附加规范”设置为“使用系统调用存根 (--specs=nosys.specs)”,[=20= 的空系统调用实现] 提供读写等系统调用。
这些设置位于
Project Properties -> Toolchain -> ARM/GNU Linker -> General -> Additional Specs
我开始在 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
方法后发生的。这是怎么回事?
答案最初来自 this site。
发生的事情是内置 __cxa_pure_virtual
默认使用 _read
和 _write
通过 printf
。要修复,请显式定义该处理程序以执行其他操作。
extern "C" void __cxa_pure_virtual();
extern "C" void __cxa_pure_virtual() {
// Add custom handler here
while(1);
}
在我的例子中,我将其追溯到当项目 compile\link 符号中未定义 'NDEBUG' 时 asf 将 assert() 定义为无效内容的问题。
具体来说,
- 项目属性->工具链->ARM\GNU C 编译器->符号:将 NDEBUG 添加为 -D 'defined symbol'.
- 项目属性->工具链->ARM\GNU 预处理汇编器->符号:添加 NDEBUG 作为 -D 'defined symbol'.
就我而言,这个问题与项目配置的链接器设置有关。
通过将链接器设置“附加规范”设置为“使用系统调用存根 (--specs=nosys.specs)”,[=20= 的空系统调用实现] 提供读写等系统调用。
这些设置位于
Project Properties -> Toolchain -> ARM/GNU Linker -> General -> Additional Specs