공유 라이브러리를 하드코딩 할수 있나요?
글쓴이: blueski / 작성시간: 월, 2004/09/20 - 10:53오후
전 지금까지 보통의 프로그램들을 컴파일 시키면 공유라이브러리의 위치가 하드코딩 되어 있는줄 알고 있었습니다.
그런데 이것 저것 실험하다 보니 아니더군요.
가령 어떤 프로그램에서 libc.so.6 을 사용한다면 해당 파일이 /lib 에 있는지 /usr/lib 에 있는지는 실행시에 결정이 되더군요.
가령 라이브러리 패스 라든지 ld.so.cache 등을 이용해서 말이죠.
(혹시 여기까지 저의 생각이 틀리면 지적해 주세요.)
그런데 이렇게 실행시에 결정되지 않고 직접 프로그램시에 공유라이브러리의 절대 경로를 포함한 위치가 실행화일내에 하드코딩 되도록 컴파일 시킬수 있나요?
(정적으로 컴파일 시키는것과는 다른 생각입니다.)
Forums:
링커의 rpath 옵션을 찾아보세요. 또는 -R
링커의 rpath 옵션을 찾아보세요. 또는 -R
소스 안에 이렇게 해 보세요..[code:1]putenv
소스 안에 이렇게 해 보세요..
과 같은 부분을 넣어서 컴파일 해 보세요.
라이브러리 위치는 ld.so.conf ( ?? 맞나.. ㅡㅡ;; ) 에 넣을수도 있지만
라는 환경변수를 통해서 개별적으로 library의 위치를 지정할수 있습니다.
이 경우 주의할 점은 이미 process가 가동된 시점이므로, 가동시에 library가 필요하기 때문에, 이 process가 다시 fork(), execl()을 통해 process를 가동시키면 putenv에 의한 환경변수가 적용되서 가동이 될 것입니다.
>/dev/null 2>&1
답변들 감사합니다.이것저것 하느라고 인사가 늦었습니다.specs
답변들 감사합니다.
이것저것 하느라고 인사가 늦었습니다.
specs 화일도 수정해 보고 삽질들 했습니다.
얼마전에야 -Wl, 을 알게 되었다는 엄청난 비극이...
역시 개념없는 왕초보의 한계는...TT.
(그런데 glibc 를 다른 디렉토리에 설치하여 이것저것 시험해 보는데 몇가지 문제들이 발생하네요.. 삽질 더 해봐야겠습니다.)
댓글 달기