gpt4 book ai didi

c++ - stm32f4 g++ 错误涉及newlib _kill_r,_kill, _getpid_r, _getpid,

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:21:36 25 4
gpt4 key购买 nike

我在将 C++ 代码编译到 stm32f4 微芯片上时遇到问题。

目标

我想在这里实现一些目标:

  1. 将 C++ 代码编译为 stm32f4-discovery(已完成成功地完成了一个简单的程序[通过构造函数的实现和其他 C++ 特定功能])
  2. 使用 ST 提供的外设库编写代码(在本例中,我使用的是 USART 功能)
  3. 使用 GNU 工具在不使用商业 IDE 的情况下编译代码(这是一项学习任务)

问题

我有两个项目设置,一个是 c 项目,可以正确编译。我还用这个项目的输出刷新了 stm32f4,它运行正常。第二个项目使用相同的代码,但对 C++ 编译器的 make 文件和文件名稍作更改(代码没有差异)。 C项目编译成功,C++项目报错。

两个项目及其在终端上的输出都可以找到here : https://dl.dropboxusercontent.com/u/32204435/USART.tar.gz

设置

我正在使用 Ubuntu 12.04.3 LTS 64 位。我已经按照本网站上的说明安装了 arm-none-eabi 工具链:vedder.se/2012/07/get-started-with-stm32f4-on-ubuntu-linux/

信息与分析

据我所知,arm-none-eabi-g++ 编译器对 newlib 的支持存在错误。我不明白为什么会出现错误,因为两个项目之间没有代码差异。如果使用来自 newlib 的函数,如 printf,也会产生类似的错误。在 USART 示例中,我限制了项目使用 newlib 的任何可能性(唯一的异常(exception)是数据类型)。该错误似乎不是由 newlib 引起的,而是由缺少的硬件头文件(或称为 newlib stub )引起的 (syscalls.h)。我尝试应用 syscalls.h 的任何尝试均未成功。

任何人都可以帮助构建这个支持 C++ 的项目,甚至可以提供一个解决方案来使用 newlib 中的代码而不会出错(比如 printf [或者,我知道一个很大的问题,来自 iostream 的 cout])?

我还在学习,我 17 岁,没有老师( self 驱动),所以可能看起来缺乏经验,而我是 :) 期待知识差距。

圣诞快乐!

最佳答案

将 -fno-rtti 和 -fno-exceptions 添加到 Makefile 上的 te CFLAGS。

或者,您可以将此 hack 添加到编译文件中

extern "C" int __aeabi_atexit(void *obj, void (*dtr)(void *), void *dso_h) {
(void) obj;
(void) dtr;
(void) dso_h;
return 0;
}

void *__dso_handle = 0;

/**
* This is an error handler that is invoked by the C++ runtime when a pure virtual function is called.
* If anywhere in the runtime of your program an object is created with a virtual function pointer not
* filled in, and when the corresponding function is called, you will be calling a 'pure virtual function'.
* The handler you describe should be defined in the default libraries that come with your development environment.
*/
extern "C" void __cxa_pure_virtual() {
while (1)
;
}

namespace __gnu_cxx {

void __verbose_terminate_handler() {
while(1)
;
}

}

这会禁用通过异常检查捕获信号。

好技巧!

关于c++ - stm32f4 g++ 错误涉及newlib _kill_r,_kill, _getpid_r, _getpid,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20762056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com