업무 중에 64bit 환경에서 32bit 프로그램을 구동해야 하는 상황이 있었다.
빌드는 32bit 환경에서 정상적으로 구동했지만 64bit로 동작시키려 하니 다음과 같은 문제가 발생했다.
linux-gate.so.1 => (0x004fb000)
libz.so.1 => not found
libpthread.so.0 => /lib/libpthread.so.0 (0x0056b000)
libssl.so.10 => not found
libcrypto.so.10 => not found
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00e90000)
libm.so.6 => /lib/libm.so.6 (0x00a44000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00d84000)
libc.so.6 => /lib/libc.so.6 (0x0014d000)
/lib/ld-linux.so.2 (0x5664f000)
libz, libssl, libcrypto가 없다고 표시되는 것.
그래서 다음을 각각 시도했다.
1. 라이브러리 없는지 확인
libz는 진짜 라이브러리가 없던 거라서 다음을 실행하여 설치했다.
sudo yum install zlib.i686
하지만 나머지는 다 있었다....?
root@localhost ~ # find / -name libssl.so.10
/lib64/libssl.so.10
/usr/lib64/libssl.so.10
root@localhost ~ # find / -name libcrypto.so.10
/lib64/libcrypto.so.10
/usr/lib64/libcrypto.so.10
사실 있었던 게 아니다 ㅎㅎ. 64bit짜리였으니까....
2. 라이브러리 디렉토리에 심볼릭 링크 생성
ldd로 찾아봤을 때에 /lib에 있던 놈들도 있고, /usr/lib에 있던 놈들도 있었기 때문에
ldd가 라이브러리를 긁어오는 모든 디렉토리에 심볼릭 링크를 생성하면
문제가 발생하긴 하더라도 not found는 안 뜨겠지? 하는 생각에 시도했던 방법이다.
다음 디렉토리에 동일한 심볼릭 링크를 생성하고
/lib
/usr/lib
/lib/i686/nosegneg/
/lib64
ldd가 제대로 긁어갈 수 있도록 설정을 다시 하도록 했다.
ldconfig -v | grep libssl
ldconfig -v | grep libcrypto
잘 뜨는 것을 확인...하지만 ldd로 확인한 결과는 달라진 게 없었다.
3. i686용 라이브러리 다운로드
구글링을 계속 하던 도중...
I need openssl 32-bit on a CentOS 6.4 box. how?
Thanks got it... Thanks to both of you, unfortunately (for my learning) my boss figured out how to do this last night apparently so i wont get a chance to try these suggestion. If i can get out of him what he did, i'll post it here for others to use. Last
www.linuxquestions.org
역시 인간은 같은 실수를 반복한다...
32bit용 라이브러리를 다운받으라는 답글이 있었다.
yum install glibc.i686
yum install libstdc++.i686
yum install openssl.i686
여기에서 나는 ssl 관련 라이브러리만 문제가 있었으므로 openssl.i686만 설치했고,
linux-gate.so.1 => (0x00475000)
libz.so.1 => /lib/libz.so.1 (0x00488000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00708000)
libssl.so.10 => /usr/lib/libssl.so.10 (0x00f3e000)
libcrypto.so.10 => /usr/lib/libcrypto.so.10 (0x00d51000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x001eb000)
libm.so.6 => /lib/libm.so.6 (0x00b68000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x002d6000)
libc.so.6 => /lib/libc.so.6 (0x0049c000)
/lib/ld-linux.so.2 (0x56586000)
libgssapi_krb5.so.2 => /lib/libgssapi_krb5.so.2 (0x008b1000)
libkrb5.so.3 => /lib/libkrb5.so.3 (0x008f3000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0x00cd7000)
libk5crypto.so.3 => /lib/libk5crypto.so.3 (0x0077a000)
libresolv.so.2 => /lib/libresolv.so.2 (0x002f4000)
libdl.so.2 => /lib/libdl.so.2 (0x0030e000)
libkrb5support.so.0 => /lib/libkrb5support.so.0 (0x00c5f000)
libkeyutils.so.1 => /lib/libkeyutils.so.1 (0x00313000)
libselinux.so.1 => /lib/libselinux.so.1 (0x007e4000)
모든 라이브러리가 잘 연결돼있는 것을 확인할 수 있었다.
편-안
결론
말썽을 일으키는 놈의 32bit 버전이 설치돼있는지를 항상 확인하자
말썽을 일으키는 놈의 32bit 이름을 잘 검색하자.
'Develop > 설치' 카테고리의 다른 글
[CentOS / VirtualBOX] VirtualBox에 CentOS 6 설치 시 Guest 확장 및 공유폴더 설정 방법 (0) | 2019.12.27 |
---|---|
[CentOS / Boost 설치] CentOS 환경에서 Boost 설치 (0) | 2019.12.16 |
[Ubuntu / Boost 설치] Ubuntu 환경에서 Boost 설치방법 (3) | 2019.12.16 |