cannot open shared object file: No such file or directory

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)