๐ก ๋ณธ ๋ฌธ์๋ '๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋งํนํ๋ ๋ฐฉ๋ฒ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
๋ฆฌ๋ ์ค์์ ๊ฐํน ์ด๋ ํ ํ๋ก๊ทธ๋จ์ ์ค์นํ๊ฑฐ๋ ์คํํ ๋, ๋ฌด์จ๋ฌด์จ so ํ์ผ(*.so), ๊ฐ๋ น libX11.so.6 ํ์ผ(*.so.*)์ด ์๋ค๊ณ ํ ๋๊ฐ ๋ฐ์ํฉ๋๋ค. ์ด ๋ฌธ์ ์ ๋ํ ๊ฐ๋ ๋ฐ ์์ธ๊ณผ ํด๊ฒฐ์ฑ ์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
1.1 ์ ์ VS ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ: ํ๋ก๊ทธ๋จ์ ์ปดํ์ผํ ๋ ์คํํ์ผ์ ํฌํจ๋์ด ๋ฐฐํฌ๋ฉ๋๋ค.
- ์๋๊ฐ ๋น ๋ฅด๋ค๋ ์ฅ์ ์ ๊ฐ์ง๊ณ ์์ง๋ง,
- ์คํํ์ผ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋นํ ์ฐจ์งํ๊ฒ ๋ฉ๋๋ค.
- ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ: ์คํ ํ๋ก๊ทธ๋จ์์ ํ์ํ ๋๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฝ๋๋ค.
- ์ฌ๋ฌ ๋ช ๋ น์ด์์ ์ฌ์ฉ๋๋ ๋์ผํ ๋ถ๋ถ์ ํน์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ง๋ค์ด ๋ชจ์๋๊ณ ๋ช ๋ น์ด์ ๋งํฌ๋ฅผ ๊ฑธ์ด๋ก๋๋ค.
- ์ดํ ๋ช
๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ ํฐ๋ฆฌ(๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์๋ ํ์ผ์ ๊ฐ์ ธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
- ๋ฐ๋ผ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณด๋ค๋ ๋์คํฌ์ ๊ณต๊ฐ์ ์ ์ฝํ๋ฉฐ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค.
- ์ด๋ฌํ ์ ๋๋ฌธ์ ์ด์์ฒด์ ์์๋ ๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
1.2 ๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋?
ํ๋ก๊ทธ๋จ๋ค์ ๊ณตํต์ ์ธ ๋ถ๋ถ๋ค์ ํ ๋๋ ํฐ๋ฆฌ์ ๋ชจ์ '๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ'๋ผ ํฉ๋๋ค.
1.2.1 ์์กด์ฑ
- ๋์ ์ผ๋ก ๋งํฌ๋ ํ๋ก๊ทธ๋จ์ ์ ์ด๋ ํ๋ ์ด์์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค.
- ๋ง์ผ ํ๋ก๊ทธ๋จ์ ์คํํ ๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์คํ๋์ง ์์ต๋๋ค(๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋ ๋ฐฉ๋ฒ์ ํ๋จ์์ ์ธ๊ธํ์์ต๋๋ค!).
- ex) GNOME ๊ทธ๋ํฝ ํ๊ฒฝ์์ ๋์ํ๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๊ณ ํ ๋ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ GTK+๊ฐ ์ค์น๋์ด ์์ง ์์ผ๋ฉด ์คํ๋์ง ์๋๋ค.
1.2.2 ๋งํฌ
- ๋์ ๋งํฌ๊ฐ ์ด๋ฃจ์ด์ง ์คํํ์ผ๊ณผ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ผ์ ld.so ์ ์ํด ๊ฒ์ฌ๋ฉ๋๋ค.
- ld.so ๋ ๋ง์ปค ์ญํ ์ ํ๋ฉด์ ์คํํ์ผ์ ์ ๊ฒํ๊ธฐ๋ ํ๋๋ฐ, ๋ง์ฝ ld.so ๊ฐ ๋งํฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด ํ์ผ์ ์คํํ ์ ์์ต๋๋ค.
1.3 ๋์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ ๋๋ ํฐ๋ฆฌ
- ๋ฆฌ๋ ์ค ์ด์์ฒด์ ์์ ์ฌ์ฉ๋๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ณต์ ๋ฌผ(shared object) ๋ผ๋ ์๋ฏธ๋ก ํ์ผ๋ช ๋ค์ .so ๊ฐ ๋ถ๋๋ค(*.dll์ด ๋ถ๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค).
- ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ์์น๋ ๋๋ถ๋ถ /lib64 ์ /usr/lib ์ ๋๋์ด์ ธ ์๋ค.
- /lib, /lib64 = cp๋ mv ๋ฑ๊ณผ ๊ฐ์ ๊ธฐ๋ณธ ๋ช ๋ น์ด ๋ฐ ์์คํ ๊ณผ ์ฐ๊ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- /usr/lib = ์์ฉ ํ๋ก๊ทธ๋จ๊ณผ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ๋ํ /lib64, /usr/lib ์ด์ธ์ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋กํ๊ธฐ ์ํด์๋ ld.so.conf ๋ ld.so.cache ํ์ผ์ ์ฌ์ฉํฉ๋๋ค.
- /etc/ld.so.cache = ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ๋ชฉ๋ก์ ๋ณด
- /lib, /usr/lib ํ์ผ์ด๋ ํ๊ฒฝ์ค์ (ld.so.conf)ํ์ผ์ ๋ฑ๋ก๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ๋ชฉ๋ก์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
- /etc/ld.so.conf = ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋ก
- ld.so.conf ํ์ผ: ๊ธฐ๋ณธ์ ์ธ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ธํ ๋ค๋ฅธ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ๋ง๋ค์ด ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋ฑ๋กํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ํ๊ฒฝ์ค์ ํ์ผ์ ๋๋ค.
- /etc/ld.so.cache = ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ ๋ชฉ๋ก์ ๋ณด
- ์ถ๊ฐ๋ก ํ์ผ์ ๋ฑ๋กํ ๋๋ ํ ์ค์ ํ๋์ฉ ์์ฑํด์ ldconfig ๋ช
๋ น์ผ๋ก ์ ๋ณด๋ฅผ ๊ฐฑ์ ํด์ผ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ค์ ๋ /etc/ld.so.conf ํ์ผ์ ์์ ํ ๊ฐฑ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค.
- ๋ค๋ฅธ์ต์ ์์ด ldconfig ๋ช ๋ น๋ง ์ ๋ ฅํด๋ ๋ด์ฉ์ด ๊ฐฑ์ ๋ฉ๋๋ค.
2. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ(*.so, *.dll)
2.1 *.so ํ์ผ์ด๋?
- so ํ์ผ์ shared object ํ์ผ์ด๋ ๋ป์ผ๋ก ํน์ ํ ๊ธฐ๋ฅ์ ๊ตฌํํด ๋์ ํ์ผ์ ์๋ฏธํฉ๋๋ค.
- ํ ํ๋ก๊ทธ๋จ์ด๋ผ ํ๋๋ผ๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ด๋ถ์์ ๋ค๋ฅธ so ํ์ผ๋ค์ ํตํด์ ์ด๋ฃจ์ด ์ง๊ฒ ๋ฉ๋๋ค.
2.2 ๊ทธ๋ ๋ค๋ฉด *.so ํ์ผ๋ ์ด๋ป๊ฒ ์ฌ์ฉ(์ฐ๊ฒฐ)ํ ๊น?
๋ง์ฝ ๋ด๊ฐ ์ค์นํ๊ณ ์ ํ๋ ํ์ผ์ด ํน์ ๊ธฐ๋ฅ ๋๋ฌธ์ ์ด๋ค so ํ์ผ์ด ํ์ํ๋ค๊ณ ํ ๋, ์ด๋ค ๊ฒฝ์ฐ๋ ์ค์น์ so ํ์ผ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํด ๋ณด๊ฑฐ๋, ์ด๋ค ๊ฒฝ์ฐ๋ ์ค์น๋ ์ดํ ์ค์ so ํ์ผ์ ๊ตฌํ๋ ๊ธฐ๋ฅ์ด ํ์ํ ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๊ธฐ ์ํด ๊ทธ so ํ์ผ์ ์ฐพ๋ค๊ฐ ์์ด์ ์๋ฌ๊ฐ ๋ ๋๋ ์์ต๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋ํ๋ฉ๋๋ค.
libstdc++.so.5: cannot open shared object file: No such file or directory
libgcc_s.so.1: cannot open shared object file: No such file or directory
- ์ด๋ ์ผ๋ฐ์ ์ผ๋ก so ํ์ผ์ ์ด๋์์ ์ฐพ์์ผ ํ๋์ง๋ฅผ ์ค์ ํด ๋์ ๊ฒฝ๋ก๋ฅผ ๋ชจ๋ ์ฐพ์ ๋ณด์์์๋ ๋ถ๊ตฌํ๊ณ libstdc++.so.5 ์ libgcc_s.so.1 ํ์ผ์ ์ฐพ์ ์ ์์๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
- ๋ฌผ๋ก ์ ํ์ผ์ด ์ค์ ๋ก ์ด๋๊ฐ์ ์๊ธฐ ๋๋ฌธ์, ์ฌ์ง์ด ํ์ฌ ๊ฒฝ๋ก์ ์๊ธฐ ๋๋ฌธ์ ๋์ฒด ์ ์ ๋ฐ ์๋ฌ๊ฐ ๋ํ๋ฌ์๊น ์์ํด ํ ์๋ ์๋๋ฐ, so ํ์ผ์ ํน์ ๊ฒฝ๋ก๋ฅผ ์ํํ๋ฉฐ ์ฐพ๊ธฐ์ ํด๋น ๊ฒฝ๋ก์์ ์ฐพ์ง ๋ชปํ๋ฉด ์์ ๊ฐ์ด ๊ฐ์ ์๋ฌ ๋ฉ์ธ์ง๊ฐ ๋ํ๋ฉ๋๋ค.
2.3 ํน์ ์คํํ์ผ์ ์ฌ์ฉ๋๋ *.so ํ์ผ๋ ์ด๋ป๊ฒ ํ์ธํ ๊น?
$ ldd ./bin/MbrGen
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f54939be000)
libstdc++.so.5 => not found
libgcc_s.so.1 => not found
- ํน์ ํ์ผ์ด๋ ํ๋ก๊ทธ๋จ์ ๋งํฌ๋๊ฑฐ๋ ์์กดํ๊ณ ์๋ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋ณด๋ฅผ ํ์ธํ ์ ์๋ ๋ช ๋ น์ ๋๋ค.
- ์ด๋,
- libc.so.6์ ๊ฒฝ์ฐ: ํ์ผ์ ์์น๋ฅผ ํ๋ก๊ทธ๋จ ๋ด์์ ์ฐพ์์ง๋ง,
- libstdc++.so.5, libgcc_s.so.1์ ๊ฒฝ์ฐ: ํ์ผ์ ์์น๋ฅผ ์ฐพ์ง ๋ชปํ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
- ์ด๋ ํน์ ํ์ผ์ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ฃผ์ด ๋งํนํ ์ ์์ต๋๋ค.
2.4 *.so ํ์ผ์ ์ด๋์ ์์๊น? ๋งํนํ๋ ค๋ฉด ๊ฒฝ๋ก๋ฅผ ์์์ผ ํ ํ ๋ฐ..
$ locate libstdc++.so.5 | more
๊ทธ๋ ๊ฒ ํด์ ์ํ๋ so ํ์ผ์ ์ฐพ์์ผ๋ฉด *.so ํ์ผ ๊ฒฝ๋ก ์ค์ ํ๋ ๋ฐฉ๋ฒ์ผ๋ก link ํ ์ ์์ต๋๋ค. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ๋ ๋ฐฉ๋ฒ์ ํ๋จ์์ ์ค๋ช ํ๋๋ก ํ๊ฒ ์ต๋๋ค.
3. *.so ํ์ผ ๊ฒฝ๋ก ์ค์
3.1 *.so ํ์ผ์ ์ฐพ๋ ์์
- LD_LIBRARY_PATH
- system default ๊ฒฝ๋ก
- /lib
- /usr/lib
3.2 *.so ํ์ผ ๊ฒฝ๋ก ์ค์ ๋ฐฉ๋ฒ
- LD_LIBRARY_PATH
- system default ๊ฒฝ๋ก
- binary code ์ hard-coding ๋ ๊ฒฝ๋ก
3.3 *.so ํ์ผ ๊ฒฝ๋ก ์ค์ ์์ธ ๋ฐฉ๋ฒ
3.3.1 LD_LIBRARY_PATH
LD_LIBRARY_PATH๋ผ๋ ํ๊ฒฝ ๋ณ์์ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ฃผ์ด ์ค์ ํ ์ ์์ต๋๋ค. ํ๊ฒฝ ๋ณ์๋ฅผ ํ์ธํ๊ณ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ค์๋ค.
$ env
$ env | grep LD_
$ export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/${USER}/gmbdsvr/MbrGen/AutocryptV2X/lib
$ export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
$ env | grep LD_
LD_LIBRARY_PATH=:/home/sjchoi/gmbdsvr/MbrGen/AutocryptV2X/lib
- env | grep LD_: 'LD_'๊ฐ ๋ค์ด๊ฐ ์๋ ํ๊ฒฝ ๋ณ์๋ฅผ ์ฐพ์์ค๋๋ค.
- ์ฒ์ ์ฐพ์์ ๋๋ ๋ณ์๊ฐ ์ง์ ๋์ง ์์ ๊ฒ์ ํ์ธํ ์ ์๋๋ฐ, export๋ก ์ง์ ํด์ค ํ ํ์ธํ๋ฉด ์ ์ฉ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
- ํ์ง๋ง ์ด๋ ๊ฒ ์ง์ ํด์ค ๊ฒฝ์ฐ ํฐ๋ฏธ๋์ ๋ค์ ์คํํ๊ฑฐ๋ ์ฌ๋ถํ ํ๋ ๊ฒฝ์ฐ, ๋ณ์๋ฅผ ๋ค์ ์ค์ ํด์ผํ๊ธฐ์, ~/.bash_profile๊ณผ ๊ฐ์ด bash shell์ ์คํํ ๋๋ง๋ค ๋ณ์๋ฅผ ์ง์ ํด์ฃผ๋ ๊ณณ์ ์ ์ฅํ ํ์๊ฐ ์์ต๋๋ค.
$ nano ~/.bash_profile
...
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/sjchoi/lib
// ์์ ํ .bash_profile ํ์ผ์ ์ ์ฉ
$ source ~/.bash_profile
3.3.2 system default ๊ฒฝ๋ก feat. /etc/ld.so.conf
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
- ์ผ๋ฐ์ ์ผ๋ก system default ๊ฒฝ๋ก๋ /usr/local/bin ๊ณผ /usr/bin ์ด๋ฉฐ, ์ด ๊ฐ์ /etc/ld.so.conf ํ์ผ์ ์ค์ ์ด ๋ ๊ฐ์
๋๋ค.
- ์ฆ, /etc/ld.so.conf ํ์ผ์ ์ค์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฐจ๋ก๋๋ก ๋์ ๊ฐ๋ฉด์ ์ํ๋ so ํ์ผ์ ์ฐพ์ต๋๋ค.
- ๋ง์ฝ ๋ด๊ฐ ์ด๋ค ํ๋ก๊ทธ๋จ์ ๋ง๋ค์ด ๊ทธ๊ฒ์ ld.so.conf ์ ๋ฃ๊ณ ์ถ์ผ๋ฉด, /etc/ld.so.conf.d/ ๊ฒฝ๋ก ๋ฐ์ *.conf ํ์ผ ์ด๋ฆ์ผ๋ก ์ ์ฅ ํ ๊ทธ ํ์ผ์ ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ง์ด ๋ฃ์ผ๋ฉด ๋ฉ๋๋ค.
$ cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
...
$ ls /etc/ld.so.conf/
libs.conf
$ cat /etc/ld.so.conf/libs.conf
/usr/local/lib
// ์ conf๋ฅผ ์์ ํ๋ค๋ฉด, ldconfig๋ฅผ ์ํํ์ฌ ์ ์ฉํ ์ ์์ต๋๋ค.
$ ldconfig
- include ๊ตฌ๋ฌธ์ ์ํด ld.so.conf.d ์์ ์๋ *.conf ํ์ผ์ ๋ด์ฉ๋ค์ด ld.so.conf ํ์ผ์ ๋ชจ๋ ๋ค์ด ๊ฐ๊ฒ ๋ฉ๋๋ค.
- ์ ํ์ผ์ ์์ ์ ํ์ผ๋ฉด ์ ์ฉํ๊ธฐ ์ํด, ldconfig ๋ช ๋ น์ด๋ฅผ ์คํ์์ผ ์ค๋๋ค.
3.3.3 binary code์ hard-coding ๋ ๊ฒฝ๋ก
ํ๋ก๊ทธ๋๋จธ๊ฐ ์์ ์์ค ์ฝ๋์ so ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ค์ ํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค. ๋ฌผ๋ก hard-coding์ ์ด๋ค ๋ฌธ์ ์ ํด๊ฒฐ๋ฐฉ๋ฒ์ด๋ ๊ถ์ฅํ์ง ์์ต๋๋ค.
const char* lib_path[] = { "/home/adnoctum/test/libabcd.so.1.0", "/home/adnoctum/test/libabcc.so.1.0"};
์ด๋ฐ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ฌ์ฉ์๊ฐ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ๊ทธ ๊ฒฝ๋ก์ so ํ์ผ์ ๊ฐ์ ธ๋ค ๋๋ ๊ฒ์ธ๋ฐ, ํ๋ก๊ทธ๋๋จธ๊ฐ hard-coding ํ ๊ฒฝ๋ก๋ฅผ ์์ง ๋ชปํ๋ฉด ๋๋ฌด์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ธฐ ๋ณด๋ค๋ ์์ ๋ฐฉ๋ฒ์ฒ๋ผ.
- /etd/ld.so.conf ํ์ผ์ ํน์ so ํ์ผ์ด ์๋ ๊ฒฝ๋ก๋ฅผ ์ง์ด ๋ฃ๊ฑฐ๋, ์๋๋ฉด so ํ์ผ์ /usr/local/bin ๊ณผ ๊ฐ์ ๊ณณ์ผ๋ก ์ด๋์ํค๊ฑฐ๋ link ๋ฅผ ๋ง๋ค์ด ์ค๋๋ค.
- ์ด๋, ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ so ํ์ผ์ด ์ฌ์ฉํ๊ฒ ๋๋ฏ๋ก ํ๋ ์ฎ๊ธฐ๊ฑฐ๋ ๋งํฌ ๋ง๋ค์ด๋ ๋ ๋ค๋ฅธ so ํ์ผ์์ ๋์ผํ ์๋ฌ๊ฐ ๋ ์ ์์ผ๋ฏ๋ก LD_LIBRARY_PATH ์ ๊ทธ ๊ฒฝ๋ก๋ฅผ ๋ง๋ถ์ด๊ฑฐ๋ ld.so.conf ํ์ผ์ ๊ทธ ๊ฒฝ๋ก๋ฅผ ์ง์ด ๋ฃ๋ ๊ฒ์ด ์ถ์ฒํฉ๋๋ค.
- ๊ทธ๋ฐ๋ฐ locate ๋ก ํ๋๋ฐ ์ ๋ง๋ก ์ํ๋ so ํ์ผ์ด ์๋ ๊ฒ์ด๋ผ๋ฉด, ๋ง์ง๋ง ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌ๊ธ๋ง์ ํด๋ณธ๋ค. ๊ทธ๋ฌ๋ฉด ๊ทธ so ํ์ผ์ด ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์๋์ง, ๊ทธ๋์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํด์ผ ํ๋์ง๋ฅผ ์ ์ ์์ต๋๋ค.
์ฐธ๊ณ
- ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ: https://wiseworld.tistory.com/68
- ๋ฆฌ๋ ์ค์์ ๋ฌด์จ๋ฌด์จ so ํ์ผ์ด ์๋ค๊ณ ํ ๋: https://adnoctum.tistory.com/541
- linux ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ์ ์ ์๋ค๋ฉฐ ํ๋ก๊ทธ๋จ ์คํ์ด ์ ๋ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ(error while loading shared libraries): https://www.lesstif.com/lpt/linux-error-while-loading-shared-libraries-95880436.html