Fixing C++ compilation bugs for the MacOS Catalina upgrade
I recently updated to macOS Catalina and encountered several issues with programs that use a C/C++ compiler.
If you see any of these errors this post might be helpful for you:
/usr/local/Cellar/llvm/7.0.1/include/c++/v1/wchar.h:119:15: fatal error: 'wchar.h' file
not found
#include_next <wchar.h>
^~~~~~~~~
1 error generated.
Or any error indicating that a standard library couldn't be found:
ld: library not found for -ldl
clang-10: error: linker command failed with exit code 1 (use -v to see invocation)
What's the issue?
The issue is that macOS Catalina doesn't use the /usr/include
and /usr/lib
/ directories anymore for all C++ headers and libraries.
A lot of projects rely on these directories to exist, can't find the files and then break.
Instead they are under the xcode path and you need to tell the C/C++ compiler where to find these libraries now.
How to fix it?
- Optionally, install a C++ compiler like clang / gcc through
brew
if one is missing. - Install Xcode through the App store to get access to the developer command-line tools.
This will install the C++ header files and libraries, albeit, in a different directory. They will be installed in/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
or a similar directory. To get the correct path for your system you can run thexcrun --show-sdk-path
command. - The C++ compiler needs to be told to look at this root path instead of
/usr/include
. This can be done by setting theCPLUS_INCLUDE_PATH
env variable. It's important to also include LLVM's normal include path because this is where it should search first.
This should fix any# adjust your llvm and CLT include paths to match your setup export CPLUS_INCLUDE_PATH=/usr/local/opt/llvm/include/c++/v1:/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include
fatal error: 'xxx.h' file not found
errors. - You might still run into linker errors like
ld: library not found for -lxxx
. The linker also needs to be told to look for libraries in the CommandLineTools/Xcode paths by setting theLIBRARY_PATH
env variable.export LIBRARY_PATH=$LIBRARY_PATH:/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/lib
- Make sure to add these
export
statements to your.bash_rc
,.zshrc
,.bash_profile
, or whatever shell you use, to make these adjusted environment variables available in all terminals.
Resources
Thanks a lot to this GitHub post for helping me figure out what's wrong.
Originally published at https://cmichel.io/fixing-cpp-compilation-bugs-for-the-mac-os-catalina-upgrade/
Thank you for sharing this amazing post on HIVE!
Your content got selected by our fellow curator @tibfox & you just received a little thank you via an upvote from our non-profit curation initiative!
You will be featured in one of our recurring curation compilations and on our pinterest boards! Both are aiming to offer you a stage to widen your audience within and outside of the DIY scene of hive.
Join the official DIYHub community on HIVE and show us more of your amazing work and feel free to connect with us and other DIYers via our discord server: https://discord.io/diyhub!
If you want to support our goal to motivate other DIY/art/music/homesteading/... creators just delegate to us and earn 100% of your curation rewards!
Stay creative & hive on!