64bit ubuntu에서 locate 등의 명령어로 찾아보면 library가 있으나 실제로는 수행할 때 찾을 수 없다는 오류를 내면서 죽는 경우가 있다. 아래는 android build 중에 수행되는 어떤 실행 파일이 libQtGui.so.4를 찾지 못해 종료한 빌드 로그이다.
... ./bin/EXE_FILE: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory ...
하지만 찾아보면 libQtGui.so.4는 정상적으로 있다.
HOME$ locate libQtGui.so.4 /usr/lib/x86_64-linux-gnu/libQtGui.so.4 /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8 /usr/lib/x86_64-linux-gnu/libQtGui.so.4.8.1
문제는 이것들이 64bit용이고 실행파일은 32bit executable이라는 것인데 이는 file command로 알 수 있다.
EXE_FILE_PATH$ file EXE_FILE EXE_FILE_PATH/EXE_FILE: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, BuildID[sha1]=0x39b2e75a8c8a0993f3774fa13ba55b893fa41a66, not stripped
EXE_FILE은 32bit 80386실행 파일이지만 ldd command로 검사해 보면 누락된 library들이 ‘not found’로 표시된다.
HOME$ ldd EXE_FILE_PATH/EXE_FILE linux-gate.so.1 => (0xf7734000) libQtGui.so.4 => not found libQtCore.so.4 => not found libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf7701000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf761c000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf75f0000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf75d2000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7428000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf7411000) /lib/ld-linux.so.2 (0xf7735000)
32bit (i386)용 library를 다음과 같이 package명 뒤에 “:i386″을 붙이면 설치 할 수 있다.
$ sudo apt-get install libqtgui4:i386
의존성 있는 library들이 함께 설치되고 다시 ldd command를 실행해 보면 모든 library들이 정상적으로 찾아 지는 것을 볼 수 있다.
$ ldd EXE_FILE_PATH/EXE_FILE linux-gate.so.1 => (0xf776b000) libQtGui.so.4 => /usr/lib/i386-linux-gnu/libQtGui.so.4 (0xf6c80000) libQtCore.so.4 => /usr/lib/i386-linux-gnu/libQtCore.so.4 (0xf69a3000) libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xf6987000) libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf68a2000) libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf6876000) libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf6858000) libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf66ae000) libz.so.1 => /lib/i386-linux-gnu/libz.so.1 (0xf6697000) libfontconfig.so.1 => /usr/lib/i386-linux-gnu/libfontconfig.so.1 (0xf6663000) libaudio.so.2 => /usr/lib/i386-linux-gnu/libaudio.so.2 (0xf664a000) libglib-2.0.so.0 => /lib/i386-linux-gnu/libglib-2.0.so.0 (0xf6551000) libpng12.so.0 => /lib/i386-linux-gnu/libpng12.so.0 (0xf6527000) libfreetype.so.6 => /usr/lib/i386-linux-gnu/libfreetype.so.6 (0xf648c000) libgobject-2.0.so.0 => /usr/lib/i386-linux-gnu/libgobject-2.0.so.0 (0xf643d000) libSM.so.6 => /usr/lib/i386-linux-gnu/libSM.so.6 (0xf6434000) libICE.so.6 => /usr/lib/i386-linux-gnu/libICE.so.6 (0xf641a000) libXi.so.6 => /usr/lib/i386-linux-gnu/libXi.so.6 (0xf640a000) libXrender.so.1 => /usr/lib/i386-linux-gnu/libXrender.so.1 (0xf63ff000) libXext.so.6 => /usr/lib/i386-linux-gnu/libXext.so.6 (0xf63ed000) libX11.so.6 => /usr/lib/i386-linux-gnu/libX11.so.6 (0xf62b9000) libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xf62b4000) librt.so.1 => /lib/i386-linux-gnu/librt.so.1 (0xf62ab000) /lib/ld-linux.so.2 (0xf776c000) libexpat.so.1 => /lib/i386-linux-gnu/libexpat.so.1 (0xf6280000) libXt.so.6 => /usr/lib/i386-linux-gnu/libXt.so.6 (0xf6224000) libXau.so.6 => /usr/lib/i386-linux-gnu/libXau.so.6 (0xf6220000) libpcre.so.3 => /lib/i386-linux-gnu/libpcre.so.3 (0xf61e4000) libffi.so.6 => /usr/lib/i386-linux-gnu/libffi.so.6 (0xf61dd000) libuuid.so.1 => /lib/i386-linux-gnu/libuuid.so.1 (0xf61d6000) libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xf61b5000) libXdmcp.so.6 => /usr/lib/i386-linux-gnu/libXdmcp.so.6 (0xf61ae000)