ubuntu15.10からantergosに移行したわけだが、先日書いたプログラムがlibboostの特定のバージョンに依存していたため動かなくなってしまった。今後は–staticにしたかったわけだが、最終的にはlibnssへの依存のためできなかった。とはいえ今後のためにメモ。
1. –enable-static-nss
cc1plus: エラー: unknown pass static-nss specified in -fenable clang-5.0: error: unsupported option '--enable-static-nss'
とエラーが出てしまう
2. -lnss_dns、-lnss_files
FAQ - glibc wikiによると、
gcc -static test-netdb.c -o test-netdb \ -Wl,--start-group -lc -lnss_files -lnss_dns -lresolv -Wl,--end-group
という例があるので実際やってみるが
/usr/bin/ld: -lnss_files が見つかりません /usr/bin/ld: -lnss_dns が見つかりません collect2: エラー: ld はステータス 1 で終了しました
となりダメである。実際libnss_dns.soは/usr/libにあったが、lib_dns.aは存在しなかった。
3. statifier
statifier で動的リンクの実行ファイルを擬似的に静的リンクにする - bkブログにあるようにstatifierを利用してみた。
sudo pacman -S gcc-multilib yaourt -S statifier
としてインストール
$ statifier -set=LD_PRELOAD="/usr/lib/libnss_files.so /usr/lib/libnss_dns.so" input_dynamic output_static
としたが、Segmentation Faultしてしまったorz