non vorrei lavorare

2020年度からの小学校プログラミング教育の必修化を親として迎えるブロガーの書く、子供との日常

C++のウェブサーバclaskをmacOSで動かした

おはようございます。ようやく子供たちの学校も毎日登校することになり、在宅勤務をエンジョイできそうな@kjunichiです。

背景

PCはもっぱら子供たちに後れをとりつつもフォートナイトのレベル上げでのみ使用して、 それ以外は8コアの残念15インチモデルのMacBook Proで過去のブログやツイートをNoteにまとめる程度な生活を送っていた。

mattn.kaoriya.net

を見かけ、たまにはC++でもさわるか?と思い立ち、この宝の持ち腐れ状態のMacBook Proで試した。

no member named 'codecvt_utf8_utf16' in namespace 'std'

早速gitコマンドでクローンしてMacBook Proで試したところ、 C++のいつもの長ったらしいコンパイルエラーに遭遇した。

とビルドエラー。

Applec++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

とバージョンが表示された。

www.phoronix.com

と言う記事を見つけ、これによると、llvm7.0からサポートされてるらしい。

mdfindコマンドに騙された?!

裏取りのためにmdfindコマンドで

mdfind codecvt_utf8_utf16

としてが、Xcode配下にはファイルが見つからない。

includeを追加するだけで解決した

codecvt_utf8_utf16をキーワードにSO(StackOverflow)でやりとりされてるコードの断片を読んだところ、 ダメもとで

#include <codecvt>

を入れてみたところ、ビンゴ!無事、コンパイル出来るようになった。

そしてこれは、

とツイートしたら、速攻で対応頂き解消した。@mattn_jpさんありがとうございました。

リンクエラー

-lstcc++fsはどうやら、FileSystemがC++に導入された初期のころは使われていたが、 すくなくともXcode環境にはlibstdc++fsなるライブラリは存在せず、libc++をリンクすれば リンクエラーが解消した。

https://twitter.com/kjunichi/status/1276314213128929280

と、こんな状態なので、まともなプルリク遅れるか怪しい状態だが、

と、どうやらCMake対応をされてるらしいので、自分がプルリク出すまでもなく、 解消されそうな気配。

実行結果

www.youtube.com

学んだこと

  • C++でも最近FileSystemなるライブラリがC++17で標準化された
  • wcharではない、多バイト文字列の処理ライブラリがC++にできたが、C++17で一部?非推奨になった
  • C++17移行はFileSystemを利用するのにはlibc++fsライブラリは不要な模様
  • C++は最新がC++11だと思っていたが、ずいぶん進んでるんだとなぁ
  • Appleもclang使ってるから割とC++も最新の規格が純正の開発環境でサポートされてるんだなぁ
  • claskのデフォルトのポートは8080

参考資料

関連記事

11年前の記事

8年前の記事