おまぬけ活動日誌

最近のツッコまれどころ

この日誌から Google してもらう


2018年07月09日(Mon) いい感じに曇り [同日]

[vim] スタティックリンクされたvimをビルドする

気軽にコピーしてきて起動できるvimが欲しくなった。

Statically (cross) compiled vim for x86, x86-64 and mipselericpruitt/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

作り手とその取り巻きだけが楽しんでる間は本物じゃない。その中身が理解できない人々の生活を変えてこそ本物だ


zunda <zunda at freeshell.org>