Skip to content

Add cstdlib include to raylib.cppm - #426

Merged
RobLoach merged 1 commit into
RobLoach:masterfrom
vectorhacker:master
Sep 14, 2026
Merged

RobLoach merged 1 commit into
RobLoach:masterfrom
vectorhacker:master

Conversation

@vectorhacker

@vectorhacker vectorhacker commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Fixes compilation error where cstdlib is not included when building modules.

Raylib is trying to call some parts of the c standard library that are not available when using modules unless you include #include <cstdlib>, for example: free.

Example error this causes and what this change fixes

FAILED: [code=1] _deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.cppm.o _deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.pcm
/opt/homebrew/opt/llvm/bin/clang++ -DGRAPHICS_API_OPENGL_33 -DPLATFORM_DESKTOP -I/Users/victormartinez/dev/workspace/my_project/build/_deps/raylib_cpp-src/include -I/Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src -g -std=gnu++23 -arch arm64 -Wno-unused-function -MD -MT _deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.cppm.o -MF _deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.cppm.o.d @_deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.cppm.o.modmap -o _deps/raylib_cpp-build/modules/CMakeFiles/raylib_cpp_modules.dir/raylib.cppm.o -c /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib_cpp-src/modules/raylib.cppm
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib_cpp-src/modules/raylib.cppm:11:
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib_cpp-src/modules/../include/raylib-cpp.hpp:56:
/Users/victormartinez/dev/workspace/my_project/build/_deps/raylib_cpp-src/modules/../include/./ModelAnimation.hpp:42:9: error: use of undeclared identifier 'free'
   42 |         RL_FREE(modelAnimations);
      |         ^~~~~~~~~~~~~~~~~~~~~~~~
/Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/raylib.h:141:33: note: expanded from macro 'RL_FREE'
  141 |     #define RL_FREE(ptr)        free(ptr)
      |                                 ^~~~
1 error generated.
[35/48] Building C object _deps/raylib-build/raylib/CMakeFiles/raylib.dir/raudio.c.o
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/raudio.c:176:
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/external/miniaudio.h:33505:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/AudioToolbox.h:43:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/MusicPlayer.h:44:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:311:32: warning: redefinition of typedef 'MIDIEventList' is a C11 feature [-Wtypedef-redefinition]
  311 | typedef struct MIDIEventList                    MIDIEventList;                  // Universal MIDI Packet
      |                                                 ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/MusicDevice.h:178:30: note: previous definition is here
  178 | typedef struct MIDIEventList MIDIEventList;
      |                              ^
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/raudio.c:176:
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/external/miniaudio.h:33505:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/AudioToolbox.h:43:
In file included from /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/AudioToolbox.framework/Headers/MusicPlayer.h:44:
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:528:30: warning: redefinition of typedef 'MIDIEventList' is a C11 feature [-Wtypedef-redefinition]
  528 | typedef struct MIDIEventList MIDIEventList;
      |                              ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:311:32: note: previous definition is here
  311 | typedef struct MIDIEventList                    MIDIEventList;                  // Universal MIDI Packet
      |                                                 ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:1034:146: warning: unknown platform 'bridgeos' in availability macro [-Wavailability]
 1034 | extern const CFStringRef        kMIDIPropertyFactoryPatchNameFile               API_DEPRECATED_WITH_REPLACEMENT("kMIDIPropertyNameConfiguration", macos(10.1, 10.2)) MIDI_API_UNAVAILABLE_NON_MACOS;
      |                                                                                                                                                                      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:79:20: note: expanded from macro 'MIDI_API_UNAVAILABLE_NON_MACOS'
   79 |         __OS_AVAILABILITY(bridgeos, unavailable) \
      |                           ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:1047:144: warning: unknown platform 'bridgeos' in availability macro [-Wavailability]
 1047 | extern const CFStringRef        kMIDIPropertyUserPatchNameFile                  API_DEPRECATED_WITH_REPLACEMENT("kMIDIPropertyNameConfiguration", macos(10.1, 10.2)) MIDI_API_UNAVAILABLE_NON_MACOS;
      |                                                                                                                                                                      ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreMIDI.framework/Headers/MIDIServices.h:79:20: note: expanded from macro 'MIDI_API_UNAVAILABLE_NON_MACOS'
   79 |         __OS_AVAILABILITY(bridgeos, unavailable) \
      |                           ^
In file included from /Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/raudio.c:214:
/Users/victormartinez/dev/workspace/my_project/build/_deps/raylib-src/src/external/stb_vorbis.c:1404:75: warning: pointer comparison always evaluates to false [-Wtautological-compare]
 1404 |       if (f->stream_start + loc >= f->stream_end || f->stream_start + loc < f->stream_start) {
      |                                                                           ^
5 warnings generated.
[39/48] Building CXX object 'CMakeFiles/@cmake_cxx_std.dir/opt/homebrew/opt/llvm/share/libc++/v1/std.cppm.o'
/opt/homebrew/opt/llvm/share/libc++/v1/std.cppm:163:15: warning: 'std' is a reserved name for a module [-Wreserved-module-identifier]
  163 | export module std;
      |               ^
1 warning generated.
ninja: build stopped: subcommand failed.

I had fixed this locally using a cmake patch:

file(READ "${raylib_cpp_SOURCE_DIR}/modules/raylib.cppm" _raylib_cppm)
string(REPLACE
  "module;\n\n#define BUILD_RAYLIB_CPP_MODULES"
  "module;\n\n#include <cstdlib>\n\n#define BUILD_RAYLIB_CPP_MODULES"
  _raylib_cppm "${_raylib_cppm}")
file(WRITE "${raylib_cpp_SOURCE_DIR}/modules/raylib.cppm" "${_raylib_cppm}")

Fixes compilation error where cstdlib is not included when building modules
@RobLoach
RobLoach merged commit 6c1ae6a into RobLoach:master Sep 14, 2026
@RobLoach

Copy link
Copy Markdown
Owner

thanks for the fixes here

@vectorhacker

Copy link
Copy Markdown
Contributor Author

@RobLoach any time! Glad this library exists.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants