# 日報(2020-12-15) POCO を static に link するとかなりでかい
# はじめに
POCO のアーカイブライブラリをビルドして、アプリケーションに static にリンクする話を以前 こちら (opens new window) に書いた時は、アーカイブライブラリのビルドを ./configure --static
と紹介させていただいたのですが、今どきな CMake だとどうするんだろうと思って POCO の CMakeLists.txt を眺めてみたら -DBUILD_SHARED_LIBS=OFF
でいいみたいで、GET POCO (opens new window) のこちらの手順は
cmake .. && cmake --build .
以下のようにするとアーカイブライブラリ (.a) ができます
cmake -DBUILD_SHARED_LIBS=OFF .. && cmake --build .
# HTTPS
C++ で HTTPS が意外(でもないか、どんな些細な事でも C++ で書きさえすれば泣きたくなるほどウザくなるのはあたりまえかも)とめんどくさく、asio のサンプル通りに書くと HAproxy の acl のホストヘッダでの振り分けにひっかからないし、curl は依存関係が無駄にジャングルで static link するのに何が必要なのかちょっとわからないし、謎なクライアントを github にあげてくださってる方がいたりするのですが「SSL 1.1.0 はサポートしてません」なんて大胆なメッセージがでてくるし(頑張ってサポートしてる私のほうが間違ってる?)で、1日無駄にしてしまったりします
で、こちら (opens new window)の方の POCO で HTTPS を実装されたサンプルをみて「そういえば POCO があったな」と思い出したのでした。Maya Posch さんの Cerflet (opens new window) とか POCO つかって 80行(!)ぐらいで Web Server 書いてらして、C++ なのに簡明に書ける書き味に感銘をうけた思い出があります
# ビルドしたら以外とでかい
こちら (opens new window) を static にリンクしてみようとおもって、Poco::Net ぐらいでいいのか、SSL だから Crypto ぐらいかなとおもったら全然足りなくて、エラーメッセージに応じてどんどん継ぎ足していったら最終的にこんなかんじにふくれあがってしまいました
g++ get.cpp -Wl,--start-group -Wl,-Bstatic -lPocoJSON -lPocoXML -lPocoUtil -lPocoCrypto -lPocoNetSSL -lPocoNet -lPocoFoundation -Wl,--end-group -Wl,-Bdynamic -lpthread -lssl -lcrypto -ldl -lm
うーむ、なんで JSON とか XML とか必要になるのか謎です
で、できあがったオブジェクトは
-rwxr-xr-x 1 ueda ueda 29000392 Dec 15 10:38 a.out
30MB, かなりデカイです。gin で ping だけみたいなサーバ作ってだいたい 10M ちょっと、それに SQL だの FireBase だの(どうして DBMS 2種類もつかってるんだか)ゴテゴテと足していって 25MB ぐらいなので、これはかなりデカイです
# 感想
C++ なので仕方ないのかもしれません