[BUG] Missing Standard C++ Headers When Building CxxTest Using CMake
Description / Steps to reproduce the issue
Description
When building NuttX using CMake (as documented in the CMake Quickstart), the build fails during the compilation of cxxtest_main.cxx with the error:
fatal error: cstdio: No such file or directory
This issue does not occur when building using the classic Makefile configuration.
Steps to Reproduce
- Configure the Board Run the following command in your NuttX source directory:
cmake -B build -DBOARD_CONFIG=xmc4800-relax:nsh -GNinja
- Build NuttX with CxxTest Build the project with:
cmake --build build
- Observed Error The build fails with the following output:
[2/8] Building CXX object apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj
FAILED: apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj
/home/thomas/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin/arm-none-eabi-g++ -D__NuttX__ -Dmain=cxxtest_main -I/home/thomas/nuttxspace/apps/include -I/home/thomas/nuttxspace/nuttx/build/apps/include -isystem /home/thomas/nuttxspace/nuttx/include -isystem /home/thomas/nuttxspace/nuttx/build/include -mtune=cortex-m4 -march=armv7e-m -mfpu=fpv4-sp-d16 -mfloat-abi=hard --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef -nostdlib -fomit-frame-pointer -mthumb -Wa,-mthumb -Wa,-mimplicit-it=always -ffunction-sections -fdata-sections -Wno-attributes -Wno-unknown-pragmas -nostdinc++ -Wno-psabi -std=c++17 -fdiagnostics-color=always -DNDEBUG -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx= -fmacro-prefix-map=/home/thomas/nuttxspace/apps= -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx/boards/arm/xmc4/xmc4800-relax= -fmacro-prefix-map=/home/thomas/nuttxspace/nuttx/arch/arm/src/xmc4= @apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj.rsp -MD -MT apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj -MF apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj.d -o apps/testing/cxx/cxxtest/CMakeFiles/apps_cxxtest.dir/cxxtest_main.cxx.obj -c /home/thomas/nuttxspace/apps/testing/cxx/cxxtest/cxxtest_main.cxx
/home/thomas/nuttxspace/apps/testing/cxx/cxxtest/cxxtest_main.cxx:29:10: fatal error: cstdio: No such file or directory
29 | #include <cstdio>
| ^~~~~~~~
compilation terminated.
[3/8] Linking C static library libs/libc/libc.a
ninja: build stopped: subcommand failed.
On which OS does this issue occur?
[OS: Linux]
What is the version of your OS?
24.04
NuttX Version
master
Issue Architecture
[Arch: arm]
Issue Area
[Area: Build System]
Host information
file sysinfo.h not exists NuttX CFLAGS: -Wstrict-prototypes -Wno-attributes -Wno-unknown-pragmas -Wno-psabi -fomit-frame-pointer --param=min-pagesize=0 -fno-common -Wall -Wshadow -Wundef -ffunction-sections -fdata-sections -mlittle-endian -march=armv7e-m -mtune=cortex-m4 -mfpu=fpv4-sp-d16 -mfloat-abi=hard -mthumb -Wa-mthumb -Wa-mimplicit-it=always -isystem /home/thomas/nuttxspace/nuttx/include -D__NuttX__ -DNDEBUG -pipe
NuttX CXXFLAGS:
-Wno-attributes
-Wno-unknown-pragmas
-Wno-psabi
-std=\c++17
-fomit-frame-pointer
--param=min-pagesize=0
-fno-common
-Wall
-Wshadow
-Wundef
-ffunction-sections
-fdata-sections
-mlittle-endian
-march=armv7e-m
-mtune=cortex-m4
-mfpu=fpv4-sp-d16
-mfloat-abi=hard
-mthumb
-Wa-mthumb
-Wa-mimplicit-it=always
-isystem /home/thomas/nuttxspace/nuttx/include/cxx
-isystem /home/thomas/nuttxspace/nuttx/include
-D__NuttX__
-DNDEBUG
-pipe
NuttX LDFLAGS: --print-memory-usage --entry=__start -nostdlib --gc-sections --cref -Map=/home/thomas/nuttxspace/nuttx/nuttx.map
NuttX configuration options:
CONFIG_HOST_LINUX=y
CONFIG_APPS_DIR=../apps
CONFIG_BASE_DEFCONFIG=\xmc4800-relax:nsh
CONFIG_BUILD_FLAT=y
CONFIG_INTELHEX_BINARY=y
CONFIG_RAW_BINARY=y
CONFIG_OUTPUT_STRIP_PATHS=y
CONFIG_ARCH_HAVE_STDARG_H=y
CONFIG_ARCH_HAVE_SETJMP=y
CONFIG_ARCH_NONE_DEBUG_H=y
CONFIG_FORTIFY_SOURCE=0
CONFIG_NDEBUG=y
CONFIG_DEBUG_ALERT=y
CONFIG_ARCH_HAVE_STACKCHECK=y
CONFIG_STACK_USAGE_WARNING=0
CONFIG_ARCH_HAVE_CUSTOMOPT=y
CONFIG_DEBUG_NOOPT=y
CONFIG_LTO_NONE=y
CONFIG_DEBUG_OPT_UNUSED_SECTIONS=y
CONFIG_DEBUG_LINK_MAP=y
CONFIG_ARCH_ARM=y
CONFIG_ARCH=\arm
CONFIG_ARM_TOOLCHAIN_GNU_EABI=y
CONFIG_ARCH_CHIP_XMC4=y
CONFIG_ARCH_ARMV7M=y
CONFIG_ARCH_CORTEXM4=y
CONFIG_ARCH_FAMILY=\armv7-m
CONFIG_ARCH_CHIP=\xmc4
CONFIG_ARM_THUMB=y
CONFIG_ARM_HAVE_MPU_UNIFIED=y
CONFIG_ARCH_HAVE_HARDFAULT_DEBUG=y
CONFIG_ARCH_HAVE_MEMFAULT_DEBUG=y
CONFIG_ARCH_HAVE_BUSFAULT_DEBUG=y
CONFIG_ARCH_HAVE_USAGEFAULT_DEBUG=y
CONFIG_ARMV7M_HAVE_STACKCHECK=y
CONFIG_ARCH_CHIP_XMC4800=y
CONFIG_XMC4_USIC=y
CONFIG_XMC4_USCI_UART=y
CONFIG_XMC4_USIC0=y
CONFIG_XMC4_ECAT=y
CONFIG_XMC4_ECAT_P0=y
CONFIG_XMC4_USIC0_CHAN0_ISUART=y
CONFIG_XMC4_USIC0_CHAN0_TX_BUFFER_SIZE=16
CONFIG_XMC4_USIC0_CHAN0_RX_BUFFER_SIZE=16
CONFIG_XMC4_USIC0_CHAN1_NONE=y
CONFIG_ARCH_TOOLCHAIN_GNU=y
CONFIG_ARCH_TOOLCHAIN_GCC=y
CONFIG_ARCH_HAVE_IRQTRIGGER=y
CONFIG_ARCH_HAVE_IRQPRIO=y
CONFIG_ARCH_HAVE_FORK=y
CONFIG_ARCH_HAVE_FPU=y
CONFIG_ARCH_HAVE_MPU=y
CONFIG_ARCH_HAVE_RESET=y
CONFIG_ARCH_HAVE_TESTSET=y
CONFIG_ARCH_HAVE_THREAD_LOCAL=y
CONFIG_ARCH_HAVE_FETCHADD=y
CONFIG_ARCH_HAVE_SYSCALL_HOOKS=y
CONFIG_ARCH_HAVE_BACKTRACE=y
CONFIG_ARCH_HAVE_DEBUG=y
CONFIG_ARCH_HAVE_PERF_EVENTS=y
CONFIG_ARCH_HAVE_CPUINFO=y
CONFIG_ARCH_CPUINFO_FREQ_KHZ=0
CONFIG_ARCH_HAVE_TCBINFO=y
CONFIG_ARCH_FPU=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARCH_STACKDUMP_MAX_LENGTH=0
CONFIG_ARCH_HAVE_RAMFUNCS=y
CONFIG_ARCH_HAVE_RAMVECTORS=y
CONFIG_BOARD_LOOPSPERMSEC=8000
CONFIG_ARCH_HAVE_INTERRUPTSTACK=y
CONFIG_ARCH_INTERRUPTSTACK=2048
CONFIG_ARCH_HAVE_HIPRI_INTERRUPT=y
CONFIG_BOOT_RUNFROMFLASH=y
CONFIG_RAM_START=0x20000000
CONFIG_RAM_SIZE=65536
CONFIG_FLASH_START=0x0
CONFIG_FLASH_SIZE=0
CONFIG_ARCH_BOARD_XMC4800RELAX=y
CONFIG_ARCH_BOARD=\xmc4800-relax
CONFIG_ARCH_HAVE_LEDS=y
CONFIG_ARCH_LEDS=y
CONFIG_ARCH_HAVE_BUTTONS=y
CONFIG_ARCH_BUTTONS=y
CONFIG_ARCH_HAVE_IRQBUTTONS=y
CONFIG_ARCH_IRQBUTTONS=y
CONFIG_ECAT=y
CONFIG_BOARD_CRASHDUMP_NONE=y
CONFIG_BOARDCTL=y
CONFIG_BOARDCTL_MKRD=y
CONFIG_BOARD_MEMORY_RANGE=\
CONFIG_DISABLE_OS_API=y
CONFIG_ARCH_HAVE_TICKLESS=y
CONFIG_USEC_PER_TICK=10000
CONFIG_START_YEAR=2014
CONFIG_START_MONTH=3
CONFIG_START_DAY=10
CONFIG_PREALLOC_TIMERS=4
CONFIG_IRQ_NWORKS=8
CONFIG_IRQ_WORK_SECTION=\
CONFIG_IRQ_WORK_STACKSIZE=2048
CONFIG_INIT_ENTRY=y
CONFIG_INIT_ARGS=\
CONFIG_INIT_STACKSIZE=2048
CONFIG_INIT_PRIORITY=100
CONFIG_INIT_ENTRYPOINT=\nsh_main
CONFIG_INIT_ENTRYNAME=\nsh_main
CONFIG_RR_INTERVAL=200
CONFIG_TASK_NAME_SIZE=31
CONFIG_SCHED_WAITPID=y
CONFIG_PTHREAD_MUTEX_ROBUST=y
CONFIG_PTHREAD_MUTEX_DEFAULT_PRIO_NONE=y
CONFIG_SCHED_CPULOAD_NONE=y
CONFIG_SCHED_CPULOAD_TICKSPERSEC=100
CONFIG_SCHED_PROFILE_TICKSPERSEC=1000
CONFIG_SCHED_STACK_RECORD=0
CONFIG_DEV_CONSOLE=y
CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=8
CONFIG_FILE_STREAM=y
CONFIG_SIG_PREALLOC_ACTIONS=4
CONFIG_SIG_ALLOC_ACTIONS=1
CONFIG_SIG_PREALLOC_IRQ_ACTIONS=8
CONFIG_PREALLOC_MQ_MSGS=8
CONFIG_PREALLOC_MQ_IRQ_MSGS=8
CONFIG_MQ_MAXMSGSIZE=32
CONFIG_SCHED_WORKQUEUE=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_HPNTHREADS=1
CONFIG_SCHED_HPWORKPRIORITY=224
CONFIG_SCHED_HPWORKSTACKSIZE=2048
CONFIG_DEFAULT_TASK_STACKSIZE=2048
CONFIG_IDLETHREAD_STACKSIZE=1024
CONFIG_PTHREAD_STACK_MIN=256
CONFIG_PTHREAD_STACK_DEFAULT=2048
CONFIG_PID_INITIAL_COUNT=16
CONFIG_ARCH_HAVE_I2CRESET=y
CONFIG_DEV_NULL=y
CONFIG_DEV_ZERO=y
CONFIG_DEV_OPTEE_NONE=y
CONFIG_DRVR_MKRD=y
CONFIG_ARCH_HAVE_RDWR_MEM_CPU_RUN=y
CONFIG_SERIAL=y
CONFIG_SERIAL_CONSOLE=y
CONFIG_MCU_SERIAL=y
CONFIG_STANDARD_SERIAL=y
CONFIG_SERIAL_NPOLLWAITERS=4
CONFIG_UART0_SERIAL_CONSOLE=y
CONFIG_UART0_SERIALDRIVER=y
CONFIG_UART0_RXBUFSIZE=256
CONFIG_UART0_TXBUFSIZE=256
CONFIG_UART0_BAUD=115200
CONFIG_UART0_BITS=8
CONFIG_UART0_PARITY=0
CONFIG_UART0_2STOP=0
CONFIG_SYSLOG=y
CONFIG_SYSLOG_DEFAULT_MASK=0xff
CONFIG_SYSLOG_CRLF=y
CONFIG_SYSLOG_MAX_CHANNELS=1
CONFIG_SYSLOG_DEVPATH=/dev/ttyS1
CONFIG_SYSLOG_DEFAULT=y
CONFIG_FS_NEPOLL_DESCRIPTORS=8
CONFIG_FS_LOCK_BUCKET_SIZE=0
CONFIG_SENDFILE_BUFSIZE=512
CONFIG_FS_REFCOUNT=y
CONFIG_FS_BACKTRACE=0
CONFIG_FS_MQUEUE_VFS_PATH=/var/mqueue
CONFIG_FS_MQUEUE_NPOLLWAITERS=4
CONFIG_FS_ANONMAP=y
CONFIG_NXFONTS_PACKEDMSFIRST=y
CONFIG_MM_DEFAULT_MANAGER=y
CONFIG_MM_DEFAULT_ALIGNMENT=8
CONFIG_MM_REGIONS=1
CONFIG_MM_MAP_COUNT_MAX=1024
CONFIG_MM_BACKTRACE=-1
CONFIG_MM_FREE_DELAYCOUNT_MAX=0
CONFIG_MM_HEAP_BIGGEST_COUNT=30
CONFIG_MM_HEAP_MEMPOOL_THRESHOLD=-1
CONFIG_BINFMT_ELF_RELOCATABLE=y
CONFIG_STDIO_BUFFER_SIZE=64
CONFIG_STDIO_LINEBUFFER=y
CONFIG_NUNGET_CHARS=2
CONFIG_LIBC_FLOATINGPOINT=y
CONFIG_LIBC_LONG_LONG=y
CONFIG_ARCH_LOWPUTC=y
CONFIG_LIBC_RAND_ORDER=1
CONFIG_LIBC_HOMEDIR=/
CONFIG_LIBC_TMPDIR=/tmp
CONFIG_LIBC_MAX_TMPFILE=32
CONFIG_LIBC_MAX_EXITFUNS=0
CONFIG_POSIX_SPAWN_DEFAULT_STACKSIZE=2048
CONFIG_LIBC_HOSTNAME=\
CONFIG_LIBC_OPEN_MAX=256
CONFIG_NAME_MAX=32
CONFIG_PATH_MAX=256
CONFIG_LINE_MAX=64
CONFIG_LIBC_STRERROR_ERRNUM=y
CONFIG_LIBC_STRSIGNAL=y
CONFIG_LIBC_LOCALE=y
CONFIG_TLS_NELEM=0
CONFIG_TLS_TASK_NELEM=0
CONFIG_TLS_NCLEANUP=0
CONFIG_LIBC_GAISTRERROR_ERRNUM=y
CONFIG_LIBC_FTOK_VFS_PATH=/var/ftok
CONFIG_LIBC_MEMFD_ERROR=y
CONFIG_LIBC_TEMPBUFFER=y
CONFIG_LIBC_MAX_TEMPBUFFER=2
CONFIG_LIBC_TEMPBUFFER_MALLOC=y
CONFIG_LIBC_MUTEX_BACKTRACE=0
CONFIG_BUILTIN=y
CONFIG_STREAM_OUT_BUFFER_SIZE=64
CONFIG_STREAM_HEXDUMP_BUFFER_SIZE=128
CONFIG_STREAM_BASE64_BUFFER_SIZE=128
CONFIG_LIBC_INLINE_QUEUE=y
CONFIG_LIBM_TOOLCHAIN=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_LIBCXXTOOLCHAIN=y
CONFIG_LIBSUPCXX_TOOLCHAIN=y
CONFIG_CXX_STANDARD=\c++17
CONFIG_CXX_EXCEPTION=y
CONFIG_CXX_RTTI=y
CONFIG_BUILTIN_TOOLCHAIN=y
CONFIG_COVERAGE_NONE=y
CONFIG_COVERAGE_DEFAULT_PREFIX_STRIP=\99
CONFIG_COVERAGE_DEFAULT_PREFIX=/data
CONFIG_PROFILE_NONE=y
CONFIG_NSH_LIBRARY=y
CONFIG_NSH_PROMPT_STRING=\nsh>
CONFIG_NSH_PROMPT_MAX=32
CONFIG_NSH_PROMPT_ENV=\PS1
CONFIG_NSH_PROMPT_SUFFIX=>
CONFIG_NSH_READLINE=y
CONFIG_NSH_QUOTE=y
CONFIG_NSH_MAXARGUMENTS=7
CONFIG_NSH_ARGCAT=y
CONFIG_NSH_NESTDEPTH=3
CONFIG_NSH_ALIAS=y
CONFIG_NSH_ALIAS_MAX_AMOUNT=1
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_DISABLE_DATE=y
CONFIG_NSH_DISABLE_IFCONFIG=y
CONFIG_NSH_DISABLE_IFUPDOWN=y
CONFIG_NSH_DISABLE_LOSMART=y
CONFIG_NSH_DISABLE_LOMTD=y
CONFIG_NSH_DISABLE_MB=y
CONFIG_NSH_DISABLE_MH=y
CONFIG_NSH_DISABLE_MW=y
CONFIG_NSH_DISABLE_PS=y
CONFIG_NSH_DISABLE_TIMEDATECTL=y
CONFIG_NSH_CODECS_BUFSIZE=128
CONFIG_NSH_CMDOPT_HEXDUMP=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_SYSINITSCRIPT=\init.d/rc.sysinit
CONFIG_NSH_INITSCRIPT=\init.d/rcS
CONFIG_NSH_SCRIPT_REDIRECT_PATH=\
CONFIG_NSH_CONSOLE=y
CONFIG_NSH_ARCHINIT=y
CONFIG_SYSTEM_NSH=y
CONFIG_SYSTEM_NSH_PRIORITY=100
CONFIG_SYSTEM_NSH_STACKSIZE=2048
CONFIG_SYSTEM_NSH_PROGNAME=\nsh
CONFIG_SYSTEM_READLINE=y
CONFIG_READLINE_HAVE_EXTMATCH=y
CONFIG_READLINE_ECHO=y
CONFIG_TESTING_CXXTEST=y
CONFIG_TESTING_RAMTEST=y
CONFIG_TESTING_RAMTEST_PROGNAME=\ramtest
CONFIG_TESTING_RAMTEST_PRIORITY=90
CONFIG_TESTING_RAMTEST_STACKSIZE=2048
Host system OS: Ubuntu 24.04.2 LTS Linux dank-engine 6.8.0-56-generic #58-Ubuntu SMP PREEMPT_DYNAMIC Fri Feb 14 15:33:28 UTC 2025 x86_64 x86_64
Host system PATH: /home/thomas/miniconda3/condabin /home/thomas/arm-gnu-toolchain-13.2.Rel1-x86_64-arm-none-eabi/bin /home/thomas/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin /snap/bin
Verification
- [x] I have verified before submitting the report.
@trns1997 does the same issue happen when you compile with Makefile?
@xiaoxiang781216 Have you or your team seen this issue before?
@xuxin930 please take a look.
@trns1997 does the same issue happen when you compile with Makefile?
No the issue does not occur when compiling using the Makefile.
@xuxin930请看一下。
sure @xiaoxiang781216 @acassis @trns1997 I have located the issue, because when neither libcxx nor uclibc++ is selected, cmake does not have a default cxx standard library header file search path. I consider adding it in a suitable place
@xuxin930请看一下。
sure @xiaoxiang781216 @acassis @trns1997 I have located the issue, because when neither libcxx nor uclibc++ is selected, cmake does not have a default cxx standard library header file search path. I consider adding it in a suitable place
Nice @xuxin930, do not hesitate to ping me on the PR, that way i can test :)
Is there any update about this? I faced the same issue or maybe is there any temporary solution?
Is there any update about this? I faced the same issue or maybe is there any temporary solution?
The temp solution would be to compile using the Makefile. Unless @xuxin930 has already implemented the solution.
let try this patch https://github.com/apache/nuttx/pull/16751
@xuxin930 I'll give it a try this evening if the patch is ready :)