안녕하세요
개인적인 업무를 진행하다 난관에 포착해 고민하다가 한가지 생각에 대한 가능성여부를 찾아 헤메던 중에 고수분들의 도움을 받고자 글을 올리게 되었습니다.
제목그대로 부분적으로 특정 라이브러리만 정적 링킹 하도록 할 수 있는지 궁금합니다.
예를들어 제가 컴파일할 프로그램이 libc/libsqlite/libpthread 등을 필요로 하는데
이 중 libc는 libc.so 를 사용하도록 하고 libsqlite/libpthread 는 executable 에 정적링킹해 버리는 ...
이것이 가능한지 모르겠습니다.
(참고로 fedora에서 android-x86 ndk 작업을 하고 있습니다)
댓글 3
-
김남형
2010.08.18 00:14
-
김남형
2010.08.19 14:28
ld 매뉴얼을 찾아보니 -Bstatic과 -Bdynamic 옵션을 제공하는군요.
또한 -shared 옵션과 -static 옵션은 동시에 사용할 수 있다고 나와있네요..
libgcc_s.so의 경우는 (필요하다면) gcc에게 --static-libgcc 옵션을 주면 될 것입니다.
-
김경태
2010.08.19 08:44
답변 감사합니다. 죄송하지만 한가지 더 물음이 생기는데
shared object 빌드 할때 shared object 에서 필요한 라이브러리를 static 하게 링킹할 수 있을까요?
(빌드된 shared object를 ldd 로 확인하면 static linked 됐다는 메시지가 나오게끔...)
-static 옵션을 주자니 shared object 만들때 주는 -shared 옵션과 상충하고 답변해주신것 처럼 직접 정적라이브러리를 명시해도
libc 는 동적으로 링킹을(libc.so) 하게되고 오히려 libgcc_s.so 까지 추가로 붙는걸 확인하였습니다ㅜ.
.
linking 시에 static library의 path를 직접 명시해주면 될 것 같습니다.
$gcc myprog.c /usr/lib/libsqlite.a /usr/lib/libpthread.a