【发布时间】:2020-04-03 17:29:41
【问题描述】:
现在我正在尝试使用 arm-none-eabi 工具链将 Nuttx 与 libc++ 交叉编译。大多数情况都很好,但是一些 C++ 应用程序对std::nothrow 有未定义的引用。我发现std::nothrow似乎是在工具链的libsupc++.a中定义的:
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 如下:
U nothrow
我猜未定义的引用是由于这些名称不匹配而发生的,一个有命名空间,另一个没有命名空间。 如何解决此命名空间不匹配问题?
以下是我的链接命令行:
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
【问题讨论】:
-
你为什么链接
ld而不是g++?使用g++将添加所有必需的 c++ 标准库