non vorrei lavorare

昔はおもにプログラミングやガジェット系、今は?

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年前の記事