2018年07月09日(Mon) いい感じに曇り [同日]
● [vim] スタティックリンクされたvimをビルドする
気軽にコピーしてきて起動できるvimが欲しくなった。
Statically (cross) compiled vim for x86, x86-64 and mipselとericpruitt/static-glibc-vimを参考にさせてもらう。 後者によると、いくつかの関数はautoconfにまかせておくとglibcに依存してしまうのだそうで、ここでは下記のように、生成されたconfig.hを変更することでリストされている関数が依存しないようにしてみた。
まずソースコードをいただいてくる。執筆時点では、パッチは173まで進んでいた。
$ git clone https://github.com/vim/vim.git
Configureとビルド。LDFLAGSを-staticにすることでスタティックリンクできるようだ。
$ cd vim $ export LDFLAGS="-static" $ export MAKEFLAGS="-j4" $ export CFLAGS="" $ ./configure --with-compiledby='zunda <zunda@freeshell.org>' \ --with-features=small --with-x=no --disable-gui --disable-netbeans \ --disable-pythoninterp --disable-python3interp --disable-rubyinterp \ --disable-luainterp $ cat << UNDEFS >> src/auto/config.h /* We don't want to use functions in glibc */ #undef HAVE_GETPWNAM #undef HAVE_GETPWUID #undef HAVE_GETPWENT #undef HAVE_DLOPEN UNDEFS $ make
デバッグシンボルはいらないだろう。できあがったものを確認する。
$ strip src/vim $ ls -lh src/vim -rwxrwxr-x 1 zunda zunda 1.9M Jul 9 22:37 src/vim $ src/vim --version | head -3 VIM - Vi IMproved 8.1 (2018 May 18, compiled Jul 9 2018 20:58:05) Included patches: 1-173 Compiled by zunda <zunda@freeshell.org> $ file ./src/vim file ./src/vim ./src/vim: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=3bbc73f8afb52166c44901c7cf6f2b2a37a5f61b, stripped $ ldd !$ ldd ./src/vim not a dynamic executable
うまくいったようだ。下記の環境でASCII文字を編集できるのを確認した。NetBSDでも走るんだよ!
- Cedar-10
- Cedar-14
- Heroku-16
- NetBSD 8.0_RC1 amd64
下記の環境ではエラーが出た。まあしょうがない。
- macOS 10.13.5: vim: cannot execute binary file
[ツッコミを入れる]
最近のツッコまれどころ