11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

BigSur で "wchar.h: No such file or directory" コンパイルエラー

Last updated at Posted at 2020-12-21

きっかけ

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 で正しい参照をするようにしておきます。

.zshrc
alias g++='g++ --sysroot=`xcrun --show-sdk-path`'

参考サイト

他の原因によるエラーの場合もあるので、その際は以下を参照してみてください。

11
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?