library - Gakgu/Gakgu.github.io GitHub Wiki
๊ฐ๋ฐ์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ๋ฅ๋ค์ ๋ชจ๋ํ ํ ํ์ผ๋ค์ ๊ฐ๋ฆฌํจ๋ค.
-
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(static library) :
XXX.lib -
๋์ ๋งํฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(dynamic-link library) :
XXX.dll
-
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(static library) :
libXXX.a -
๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(shared library) :
libXXX.so
-
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(static library) :
libXXX.a -
๋ค์ด๋๋ฏน ๋ผ์ด๋ธ๋ฌ๋ฆฌ(dynamic library) :
libXXX.dylib
$ gcc -c A.c B.c C.c
$ ar -rc libXXX.a A.o B.o C.o
$ gcc -c -fPIC XXX.c
$ gcc -shared -Wl,-soname,libXXX.so -o libXXX.so.x.x.x XXX.o
-
real name :
์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฆ์ด๋ค. libXXX.so.major_version.minor_version.release_version๊ณผ ๊ฐ์ ํ์์ผ๋ก ์์ฑ๋๋ค. -
soname :
real name์์ ๋ง์ด๋ ๋ฒ์ ์ ์ ์ธํ ์ด๋ฆ์ด๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฌ์ soname์ผ๋ก ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋๋ค. -
linker name :
real name์์ lib์ .so ์ฌ์ด์ ์๋ ์ด๋ฆ์ ๋งํ๋ค. ๋น๋์ ๋ง์ปค ๋ค์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋๋ค. -
major version :
์ด์ ๋ฒ์ ๊ณผ ํธํ์ด ์๋ ๊ฒฝ์ฐ ๋ฉ์ด์ ๋ฒ์ ์ ์ฌ๋ฆฐ๋ค. -
minor version :
์ด์ ๋ฒ์ ๊ณผ ํธํ์ด ๋ ๊ฒฝ์ฐ ๋ง์ด๋ ๋ฒ์ ์ ์ฌ๋ฆฐ๋ค. -
release version :
๋ฐฐํฌ ๋ฒ์ ์ ์๋ฏธํ๋ค.
-
install name :
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฌ์ install name์ผ๋ก ๋ค์ด๋๋ฏน ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฐพ๋๋ค. soname๊ณผ ๋ฌ๋ฆฌ ์ ๋ ๊ฒฝ๋ก๊ฐ ํฌํจ๋์ด ์๋ค. -
identification name :
?????
$ ldd FILE
$ otool -L FILE
soname์ผ๋ก ๋ ์ฌ๋ณผ๋ฆญ ๋งํฌ์ ๊ฑฐ๊ธฐ์ ๋ฉ์ด์ ๋ฒ์ ์ ๋บ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ฅผ ๋ง๋ ๋ค.
$ ln -s libXXX.so.0.0.0 libXXX.so.0
$ ln -s libXXX.so libXXX.so.0
/etc/ld.so.conf ์ ๊ณต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ๊ณ ldconfig ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
$ echo /usr/local/lib >> /etc/ld.so.conf
$ ldconfig
-
@executable_path :
์คํ ํ์ผ์ด ํฌํจ๋์ด ์๋ ๋๋ ํ ๋ฆฌ์ ์ ๋ ๊ฒฝ๋ก -
@loader_path :
๋ก๋ํ ํ์ผ์ ๋๋ ํ ๋ฆฌ ์ ๋ ๊ฒฝ๋ก -
@rpath :
2๊ฐ ์ด์์ ๊ฒฝ๋ก๋ฅผ ๊ฐ์ง ์ ์๋ ์ฌ์ฉ์(?)์ง์ ๊ฒฝ๋ก -
์คํํ์ผ์ ์ ์ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ install name ๋ณ๊ฒฝํ๊ธฐ :
$ install_name_tool -change <old_install_name> <new_install_name> <executable>
-
๋ค์ด๋๋ฏน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ identification name ๋ณ๊ฒฝํ๊ธฐ
$ install_name_tool -id <old_install_name> < new_install_name>
-
์์กด์ฑ ํ์ธ :
$ otool -L ํ์ผ
-
rpath ํ์ธ :
$ otool -l ํ์ผ | grep -A 2 RPATH
-
install name ํ์ธ :
$ otool -D ํ์ผ