おはようございます。ようやく子供たちの学校も毎日登校することになり、在宅勤務をエンジョイできそうな@kjunichiです。
背景
PCはもっぱら子供たちに後れをとりつつもフォートナイトのレベル上げでのみ使用して、 それ以外は8コアの残念15インチモデルのMacBook Proで過去のブログやツイートをNoteにまとめる程度な生活を送っていた。
を見かけ、たまにはC++でもさわるか?と思い立ち、この宝の持ち腐れ状態のMacBook Proで試した。
no member named 'codecvt_utf8_utf16' in namespace 'std'
早速gitコマンドでクローンしてMacBook Proで試したところ、 C++のいつもの長ったらしいコンパイルエラーに遭遇した。
とビルドエラー。
Appleのc++がc++17に未対応なのか?
c++ --version Apple clang version 11.0.3 (clang-1103.0.32.62) Target: x86_64-apple-darwin19.5.0 Thread model: posix InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
とバージョンが表示された。
と言う記事を見つけ、これによると、llvm7.0からサポートされてるらしい。
mdfindコマンドに騙された?!
裏取りのためにmdfindコマンドで
mdfind codecvt_utf8_utf16
としてが、Xcode配下にはファイルが見つからない。
includeを追加するだけで解決した
codecvt_utf8_utf16をキーワードにSO(StackOverflow)でやりとりされてるコードの断片を読んだところ、 ダメもとで
#include <codecvt>
を入れてみたところ、ビンゴ!無事、コンパイル出来るようになった。
そしてこれは、
macOSの現行版Xcode(clang-1103.0.32.62)だと#include <codecvt>を追加してビルド出来た #さぼり過ぎてプリリク方法ド忘れしてる / “Add CLASK_DISABLE_LOGS · mattn/clask@48e61cf · GitHub” https://t.co/lH75VvqzLL
— kjunichi (@kjunichi) 2020年6月25日
とツイートしたら、速攻で対応頂き解消した。@mattn_jpさんありがとうございました。
リンクエラー
-lstcc++fsはどうやら、FileSystemがC++に導入された初期のころは使われていたが、 すくなくともXcode環境にはlibstdc++fsなるライブラリは存在せず、libc++をリンクすれば リンクエラーが解消した。
https://twitter.com/kjunichi/status/1276314213128929280
と、こんな状態なので、まともなプルリク遅れるか怪しい状態だが、
clask、Makefile 全部消して cmake 化した。
— mattn (@mattn_jp) 2020年6月26日
と、どうやらCMake対応をされてるらしいので、自分がプルリク出すまでもなく、 解消されそうな気配。
実行結果
学んだこと
- C++でも最近FileSystemなるライブラリがC++17で標準化された
- wcharではない、多バイト文字列の処理ライブラリがC++にできたが、C++17で一部?非推奨になった
- C++17移行はFileSystemを利用するのにはlibc++fsライブラリは不要な模様
- C++は最新がC++11だと思っていたが、ずいぶん進んでるんだとなぁ
- Appleもclang使ってるから割とC++も最新の規格が純正の開発環境でサポートされてるんだなぁ
- claskのデフォルトのポートは8080