LoginSignup
5

More than 5 years have passed since last update.

バイナリでもらってきたツールチェインがx86_64の環境で動かないとき、それは32bitのライブラリが無いためかも

Last updated at Posted at 2018-01-25

組み込みのLinuxの開発で時々ある話。
まっさらの仮想マシン(ubuntu 16.04) にビルド環境をセットアップしようとしたら、SoCベンダーの提供するバイナリのツールチェインが動かない。

実行ファイルは確かに存在するのに、なぜか No such file or directory ??

$ ls -l ./arm-xxxxx-linux-gnueabi-gcc 
-rwxr-xr-x 1 root root 1897163 Jan 25 03:36 ./arm-xxxxx-linux-gnueabi-gcc
$ ./arm-xxxxx-linux-gnueabi-gcc 
-bash: ./arm-xxxxx-linux-gnueabi-gcc: No such file or directory

これは32bit x86用のバイナリだった

$ file ./arm-xxxxx-linux-gnueabi-gcc 
./arm-xxxxx-linux-gnueabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.9, not stripped

ldd で共有ライブラリのリストが見られない

$ ldd ./arm-xxxxx-linux-gnueabi-gcc 
    not a dynamic executable
$ 
$ ls /lib/ld-linux.so.2
ls: cannot access '/lib/ld-linux.so.2': No such file or directory

わかった。32bit用の共有ライブラリが入っていないからだ。

32bit用の共有ライブラリをインストールする

$ sudo apt-get install lib32stdc++6 lib32z1

この2つを入れれば芋づる式に必要なファイルはほとんど入るはず。

$ ldd ./arm-xxxxx-linux-gnueabi-gcc 
    linux-gate.so.1 =>  (0xf7f16000)
    libstdc++.so.6 => /usr/lib32/libstdc++.so.6 (0xf7d94000)
    libm.so.6 => /lib32/libm.so.6 (0xf7d3f000)
    libgcc_s.so.1 => /usr/lib32/libgcc_s.so.1 (0xf7d22000)
    libc.so.6 => /lib32/libc.so.6 (0xf7b6e000)
    /lib/ld-linux.so.2 (0xf7f18000)

今度は共有ライブラリのリストが見られるようになった。

$ ./arm-xxxxx-linux-gnueabi-gcc 
arm-xxxxx-linux-gnueabi-gcc: fatal error: no input files
compilation terminated.

実行できるようになった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5