trns1997 opened a new issue, #18088:
URL: https://github.com/apache/nuttx/issues/18088
### Description / Steps to reproduce the issue
When building NuttX with C++ enabled, the Makefile logic in
`tools/Config.mk` unconditionally adds `include/cxx` to the system include path
whenever neither `CONFIG_LIBCXX` nor `CONFIG_UCLIBCXX` is selected:
```
# The default C/C++ search path
ARCHINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include
ifeq ($(CONFIG_LIBCXX),y)
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)libcxx
else ifeq ($(CONFIG_UCLIBCXX),y)
ARCHXXINCLUDES +=
${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)uClibc++
else
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)cxx
ifeq ($(CONFIG_ETL),y)
ARCHXXINCLUDES += ${INCSYSDIR_PREFIX}$(TOPDIR)$(DELIM)include$(DELIM)etl
endif
endif
```
This means that `include/cxx` is implicitly used even when building with an
external C++ toolchain (`CONFIG_LIBCXXTOOLCHAIN=y`).
However, `include/cxx` does not provide a full C++ standard library
implementation. Instead, it provides NuttX-specific C++ ABI compatibility
headers (similar in role to libcxxabi, not libcxx). As discussed, these headers
should only be used when the mini C++ ABI is explicitly enabled see discussion
in PR #17968.
Using `include/cxx` with a full external C++ toolchain can cause conflicts
between the toolchain’s standard headers and NuttX’s libc headers (e.g.
conflicting definitions of `div_t`, `ldiv_t`, `lldiv_t` via `<cstdlib>` /
`<stdlib.h>`). In practice, the Makefile behavior is overly permissive and
works but is not entirely correct.
The correct behavior should be:
`include/cxx` is only added to the include path when the mini C++ ABI is
explicitly enabled (`LIBCXXMINI` / `LIBMINIABI`) with a start in PR #17990
When using `CONFIG_LIBCXXTOOLCHAIN`, the toolchain-provided C++ headers
should be used without implicitly injecting `include/cxx`
This is a broader correctness issue that affects both Makefile and CMake
builds. While CMake currently exposes the problem more clearly (addressed in PR
#17968), the root cause is the Makefile include logic itself.
### On which OS does this issue occur?
[OS: Linux]
### What is the version of your OS?
Ubuntu 24.04
### NuttX Version
master
### Issue Architecture
[Arch: all]
### Issue Area
[Area: Build System]
### Host information
_No response_
### Verification
- [x] I have verified before submitting the report.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]