(Crystal)(ArchLinux)(AlterLinux) --staticでbuildする時に「ライブラリが見つからない」となる場合

この記事はAlterLinux(ArchLinux系)で確認したものになります

Crystalで 動的リンクではなく静的リンクで外部のライブラリに依存することなく動作させようとして
--staticオプションを付けて buildしようとしたら -lpcre -levent -lgc 等が見つからないとなって、
buildに失敗することがあります。

原因としては 静的リンクライブラリファイル(.a)が無いからのようで、
何らかの方法で不足しているファイルを用意すればエラーは出なくなるようです。

基本的な流れは ソースからビルドを行い ライブラリとしてパスが通った所にインストールする感じですが、
make installまでやってしまうとシステム全体との整合性が取れなくなってしまう可能性もゼロでは無いかと思い、
試しに不足している 各 .a ファイルのみを /usr/local/lib/ に送り込んでみたところ、
--staticでの buildが成功するようになりました。

今後、もしも 突然 --staticでのbuildが出来なくなった場合などは
最新バージョン 過去のバージョン システムと同じバージョン などを試すと 上手く行くかもしれません。

バージョン部分に関しては x に置き換えてますので各DLページにて最新版のものに読み替えてください。
不足分の .a ファイルをインストールする方法を確認できたら 今後も追記していきます。


-lpcre(libpcre.a) が 無い場合

# https://www.pcre.org/ から ソースファイルを取得してビルドし、/usr/local/lib/ に 送り込みます。
# pcre2(GitHubのほう)ではなく、 pcre(SourceForgeのほう)のソースを取得してください。
# (バージョンは最新ので問題ないかと思います)
wget https://sourceforge.net/projects/pcre/files/pcre/x.xx/pcre-x.xx.tar.bz2/download -O pcre.tar.bz2
tar -jxvf pcre.tar.bz2
cd pcre-x.xx
./configure
make
sudo cp ./.libs/libpcre.a /usr/local/lib/libpcre.a



-levent(libevent.a) が 無い場合

# https://libevent.org/ から ソースファイルを取得してビルドし、/usr/local/lib/ に 送り込みます。
# (バージョンは最新ので問題ないかと思います)
wget https://github.com/libevent/libevent/releases/download/release-x.x.xx-stable/libevent-x.x.xx-stable.tar.gz
tar -zxvf libevent-x.x.xx-stable.tar.gz
cd libevent-x.x.xx-stable
./configure
make
sudo cp ./.libs/libevent.a /usr/local/lib/libevent.a



-lgc(libgc.a) が 無い場合

# https://www.hboehm.info/gc/ から ソースファイルを取得してビルドし、/usr/local/lib/ に 送り込みます。
# (バージョンは最新ので問題ないかと思います)
# --enable-staticオプションを付けることで静的ライブラリもビルドされるようです
wget https://www.hboehm.info/gc/gc_source/gc-x.x.x.tar.gz
tar -zxvf gc-x.x.x.tar.gz
cd gc-x.x.x
./configure '--enable-static'
make
sudo cp .libs/libgc.a /usr/local/lib/libgc.a



-lssl(libssl.a) と -lcrypto(libcrypto.a) が 無い場合

# libssl.a と libcrypto.a は opensslに含まれているので opensslを ビルドし、/usr/local/lib/ に 送り込みます。
# https://www.openssl.org/source/ から openssl-1.x.x.tar.gz を取得します
# バージョンは 1と3の系統がありますが バージョン1系統の 最新バージョンを使用してみました。
wget https://www.openssl.org/source/openssl-1.x.x.tar.gz
tar -zxvf openssl-1.x.x
cd openssl-1.x.x
./config    # ./configureではないので注意
make
sudo cp ./libcrypto.a /usr/local/lib/libcrypto.a
sudo cp ./libssl.a /usr/local/lib/libssl.a