提问人:KhoiN 提问时间:3/14/2023 更新时间:3/14/2023 访问量:81
GDB 无法使用 std 将二进制文件加载到 C 和 C++ 混合程序的目标::
GDB cannot load binary to target with C and C++ mixing program using std::
问:
我正在尝试将 C++ 源代码移植到基于 C 的项目(C 中的主函数)中,用于基于 risc-v cpu 的目标。该程序可以毫无问题地编译,但在某些情况下我无法将二进制文件加载到目标。
在我的代码中,有 3 个类 Switch、Member 和 Adapter。类 Adapter 继承了 Member 类,其中使用了 std::vector。
我尝试了 4 种情况,如下所示:
案例一:
在程序中,我创建了一个 Switch 类的对象。代码编译没有错误,但我无法将二进制文件加载到目标。我得到了与 GDB 相关的错误,如下面的 2 张照片所示:
此外,我还得到了与异常处理和 std:: 相关的符号:
<__cxa_allocate_exception>
<__cxa_throw>
<std::bad_alloc::~bad_alloc()>
<std::bad_exception::~bad_exception()>
...
案例二:
在本例中,我创建了一个类 Switch 的对象,同时覆盖了 new 和 delete 运算符。二进制文件可以加载到目标。
与案例 1 相比,没有任何异常处理符号,唯一与 std:: 相关的是 std::type_info。
案例三:
这一次,在程序中,我创建了一个 Switch 类的对象和一个 Adapter 类的对象。new 和 delete 运算符始终被覆盖。我在案例 1 中遇到了相同的错误。
在符号列表中,我再次发现了很多异常处理和 std:: 符号。
案例4:
对于这种情况,我创建了一个 Switch 类的对象,并在代码中使用了 std::vector<>。我在案例 1 中遇到了相同的错误。
当然,符号列表中有很多异常处理和 std:: 符号。
获得的结果可以表明我的问题是由于 std:: 引起的,我已经在链接对象时尝试了 --fno-exceptions -nostdlib -std=gnu++0x,但仍然无法解决问题。
附言:我使用了riscv32-elf-(nds32le-elf-mculib-v5f)工具链和AndeSight中集成的GDB。
你们有没有遇到过和我一样的问题?
在编译和链接方面混合 C 和 C++ 时,您有什么建议吗?
任何休息将不胜感激。先谢谢你。
答: 暂无答案
评论