首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在newlib的libsupc++.a中未定义对std::nothrow的引用

在newlib的libsupc++.a中未定义对std::nothrow的引用
EN

Stack Overflow用户
提问于 2020-04-04 01:29:41
回答 1查看 376关注 0票数 0

现在,我正在尝试使用arm-none-eabi工具链来交叉编译Nuttx和libc++。大多数事情都很好,但是一些C++应用程序对std::nothrow的引用并不明确。我发现std::nothrow似乎是在工具链的libsupc++.a中定义的:

代码语言:javascript
复制
new_handler.o:
00000000 b (anonymous namespace)::__new_handler
00000000 T std::get_new_handler()
00000000 T std::set_new_handler(void (*)())
00000000 R std::nothrow

我确保libsupc++.a链接到我的应用程序。我的应用程序引用std::nothrow的方式如下:

代码语言:javascript
复制
U nothrow

我猜这个未定义的引用是由于b/w这些名称不匹配造成的,一个名称有名称空间,另一个没有名称空间。如何修复此命名空间不匹配?

以下是我的链接命令行:

代码语言:javascript
复制
arm-none-eabi-ld --entry=__start -nostartfiles -nodefaultlibs -g -Map=/usr/src/uros_ws/firmware/spresense/sdk/nuttx.map --cref --defsym __stack=_vectors+1572864 -T/usr/src/uros_ws/firmware/spresense/sdk/bsp/scripts/ramconfig.ld -L"/usr/src/uros_ws/firmware/spresense/sdk/lib" -L"/usr/src/uros_ws/firmware/spresense/sdk/bsp/board"  -L"/usr/src/uros_ws/firmware/spresense/sdk/bsp" \
-o "/usr/src/uros_ws/firmware/spresense/sdk/nuttx"   \
--start-group -lbsp -lsystem -lextdrivers -llte -lexamples -lapps -lsched -ldrivers -lconfigs -lc -lmm -larch -lcxx -lapps -lnet -lfs -lbinfmt -lgraphics -lnx -lcxx -lboard "/usr/local/bin/../lib/gcc/arm-none-eabi/7.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m/fpv4-sp/hard/libm.a"  -lsupc++ "/usr/local/bin/../lib/gcc/arm-none-eabi/7.3.1/thumb/v7e-m/fpv4-sp/hard/libgcc.a" --end-group
EN

回答 1

Stack Overflow用户

发布于 2020-04-05 05:50:52

你必须重命名你在你的应用中引用的nothrow的方式。.a文件是一个已经编译的库,所以除非您能够修改它并重新编译它,否则它是不可修改的(因此有符号和引用)。

编译器使用名称空间来创建唯一的引用(name mangling,请查看此示例https://godbolt.org/z/cPkvxm)。因此,您必须使用std::nothrow (带有它所定义的名称空间),否则,您将调用另一个(可能是未定义的)符号。

如果Custom不包含命名空间,您将能够像现在一样使用它,但是,如果将来您决定创建自己的nothrown,您将会遇到冲突(很容易解决,但它需要时间和像nothrownCustom/Customnothrown/nothrown_custom/etc这样的东西,而不是nothrow::nothrown)。

PD:对整个文件使用命名空间是一个非常简单的修复方法,但在此之前先看一下这篇文章:Why is "using namespace std;" considered bad practice?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61017313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档