linux ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉฐ ํ๋ก๊ทธ๋จ ์คํ์ด ์ ๋ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ(error while loading shared libraries)
linux ์์ program ์ ์คํํ ๋ ๋ค์๊ณผ ๊ฐ์ด "cannot open shared object file: No such file or directory" ์๋ฌ๊ฐ ๋๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค.
$ openssl openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
์ด๋ฐ ๋ฌธ์ ๋ ๋ค์ ์ ์ฐจ๋ฅผ ํตํด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.
ldd ๋ก ํ์ library ํ์ธํ๊ธฐ
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด์ฑ์ ์ถ๋ ฅํ๋ ldd ๋ก ํ๋ก๊ทธ๋จ ์คํ์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ธํฉ๋๋ค.
$ ldd `which openssl` linux-vdso.so.1 (0x00007ffcc7df1000) libssl.so.1.1 => not found libcrypto.so.1.1 => not found libdl.so.2 => /lib64/libdl.so.2 (0x00007f3f51b7a000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f3f5195c000) libc.so.6 => /lib64/libc.so.6 (0x00007f3f515b1000) /lib64/ld-linux-x86-64.so.2 (0x00007f3f51d7e000)
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด libssl.so.1.1 ๊ณผ libcrypto.so.1.1 ์ด "not found" ์ธ ๊ฒ์ ํ์ธํ ์ ์๊ณ ์ด 2๊ฐ ํ์ผ์ ๋ชป์ฐพ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ ์ ์ถํ ์ ์์ต๋๋ค.
์ฒ๋ฆฌ
"not found" ์ง๋ง ์ค์ ์์ธ์ 2๊ฐ์ง์ ๋๋ค.
์ด๋ฐ ํ์์ ๋ค์๊ณผ ๊ฐ์ ์์ธ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
- ์คํ์ ํ์ํ library ๊ฐ ์์ โ find ๋ช ๋ น์ด๋ก ์์คํ ์์ library ๋ฅผ ์ฐพ๊ณ ์์ผ๋ฉด ์๋์์ ์ค๋ช ํ๋ ํ๊ฒฝ ๋ณ์์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํฉ๋๋ค.ย
- ์คํ์ ํ์ํ library ๊ฐ ํ๊ฒฝ ๋ณ์์ ์์
LD_LIBRARY_PATH ํ๊ฒฝ ๋ณ์ ํ์ธ
๋ฆฌ๋ ์ค์์ ์คํ์ ํ์ํ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ย LD_LIBRARY_PATH ํ๊ฒฝ ๋ณ์์์ ์ฐพ๊ฒ ๋ฉ๋๋ค. ๋๋ถ๋ถ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ชป ์ฐพ๋๋ค๋ ์๋ฌ์ ์์ธ์ ๋ฐ๋กย LD_LIBRARY_PATH ๋ณ์๊ฐ ์๋ชป ์ค์ ๋์ด์์ ๋๋ค.
ํนํ third party program์ ๊ฒฝ์ฐ /opt ๋ย /usr/local ๊ฐ์ด ๋ณ๋์ ๊ฒฝ๋ก์ ์ค์น๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ผ๋ฏ๋ก ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
๋จผ์ ํ๊ฒฝ ๋ณ์๋ฅผ ํ์ธํ๋ ค๋ฉด ๋ค์ ๋ช ๋ น์ ์คํํฉ๋๋ค.
$ echo $LD_LIBRARY_PATH
LD_LIBRARY_PATHย ํ๊ฒฝ ๋ณ์ ๊ฒฝ๋ก๋ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ(Ex: libssl.so.1.1) ์ด ์๋์ง ํ์ธํ๋ ค๋ฉด ๋ค์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํฉ๋๋ค.
IFS=':' ; for i in $LD_LIBRARY_PATH; do ls -l $i/libssl.so.1.1 2>/dev/null;done
์ ์ฝ๋ ์คํ์ ๊ฒฐ๊ณผ๊ฐ ๋์ค์ง ์๋๋ค๋ฉดย LD_LIBRARY_PATH ๊ฐ ์ ๋๋ก ์ค์ ๋์ง ์์ ๊ฒ์ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๊ฒฝ๋ก๋ฅผ ํ์ธํ ํ์ LD_LIBRARY_PATH์ ํด๋น ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ดย ์ค์ ํฉ๋๋ค. ๋ค์์ compile ํด์ ํ๋ก๊ทธ๋จ ์ค์น์ ๋ง์ด ์ฌ์ฉ๋๋ /usr/local/lib64 ๋ฅผ ์ถ๊ฐํ๋ ์์ ์ ๋๋ค.ย
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
์ด์ ๋ค์ ldd ๋ฅผ ์คํํด์ ์ ์์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋ ์ง ํ์ธํด ๋ณด๋ฉด ๋ฉ๋๋ค.
์ด์ ๋ก๊ทธ์ธ์์๋ ๋ฌธ์ ์๋๋ก exportย LD_LIBRARY_PATH ๊ตฌ๋ฌธ์ shell ์ด๊ธฐํ ํ์ผ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.