BigSur で "wchar.h: No such file or directory" コンパイルエラー
きっかけ
MacBook に BigSur をクリーンインストールして、Homebrew で gcc を入れてから、g++ で C++ をしてみると、以下のエラーが出てコンパイルできなかった。
$ g++ main.cpp
(・・・中略・・・)
/usr/local/Cellar/gcc/10.2.0/include/c++/10.2.0/cwchar:44:10: fatal error: wchar.h: No such file or directory
44 | #include <wchar.h>
| ^~~~~~~~~
compilation terminated.
環境
- MacOS BigSur
- zsh 5.8
- g++ 10.2.0
模索
https://qiita.com/yoya/items/c0b26cba3c040c581643
こちらの記事で知ったのですが、、Xcode10 からは、インクルードファイルは、/usr/include/
の中ではなく、SKD の中のものを使う仕様に変更されたようです。(以下、Xcode10 のリリースノート)
The command line tools will search the SDK for system headers by default.
However, some software may fail to build correctly against the SDK and
require macOS headers to be installed in the base system under /usr/include.
If you are the maintainer of such software, we encourage you to update
your project to work with the SDK or file a bug report for issues that are
preventing you from doing so.
そこで、SDK がどこにあるか探してみます。
$ xcrun --show-sdk-path
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
つぎに、g++ がどこからインクルードを読み取ってるかを調べてみます。
$ /usr/local/bin/g++ -v
Using built-in specs.
COLLECT_GCC=/usr/local/bin/g++
(・・・中略・・・)
--with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX11.0.sdk
(・・・後略・・・)
$ ls /Library/Developer/CommandLineTools/SDKs
MacOSX.sdk MacOSX11.1.sdk
原因と解決
どうやら、g++ 自体は Xcode の変わった規定に対応していたようですが、なにかしらの拍子で改変されたか、Mac のファイルが事故で消えたかで、参照がうまく行っていなかったようでした。alias で正しい参照をするようにしておきます。
alias g++='g++ --sysroot=`xcrun --show-sdk-path`'
参考サイト
他の原因によるエラーの場合もあるので、その際は以下を参照してみてください。
- macOS 'wchar.h' File Not Found (Stack Overflow)
- Can't compile C program on a Mac after upgrade to Mojave
(Stack Overflow)
- Build issues on macOS Catalina (fatal error: 'wchar.h' file not found) #1055 (GitHub)
Author And Source
この問題について(BigSur で "wchar.h: No such file or directory" コンパイルエラー), 我々は、より多くの情報をここで見つけました https://qiita.com/wsbky/items/6d51353fa16f36312e84著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .