読者です 読者をやめる 読者になる 読者になる

tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

libnssを静的リンクできなかった

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