–rpath 와 동적라이브러리 링킹

 가끔씩은 코딩만 해서는 해결 할 수 없는 문제들이 있습니다.

(뭐, 해결할 수 없다라기 보다는 시간이 많이드는, 열라 힘든?)

 

-rpath 라는 것이 이런식으로 알면 굉장히 쉬운 일이라고 할 수 있습니다.

우리는 종적 동적라이브러리를 사용합니다. 일명 .so 라고 부르는 파일들이죠.

 

.so를 사용하기 위해서는 명시적으로 dlopen 을 이용하든지, 아니면 그냥 해당 라이브러리의 이름만

링크되어 있는 라이브러리 들을 이용해서 실제 자동적으로 실행시에 해당 .so가 로드되도록 하는 방법이

있습니다.

 

 그런데, 우리는 보통 이 .so를 사용하기 위해서, 경로 지정에 두 가지 방법을 사용합니다.

첫째는 /etc/ld.so.conf 를 수정해서 /sbin/ldconfig 을 이용해서 전역적으로 지정하는 방식이고, 두번째는

LD_LIBRARY_PATH 를 셋팅해서 해당 유저에게만 사용하는 방법입니다.

 

 위의 방식의 문제점은 무엇일까요? 그건, 사용자가 .so 의 위치를 어떤식으로든 지정을 해줘야 하는 겁니다.

같이 배포하더라도, 해당 위치를 지정해야 한다면, 그렇게 쉬운일이 아닙니다.(조금만 알면 쉽지요.) 그런데

-rpath 라는 넘은 프로그램이 빌드될 때, 자동적으로 .so의 위치를 부여하는 것입니다. 절대 상대 경로 모두 사용 가능하구요.

 

  -rpath .so 경로 -Wl 이런식으로 이용할 수 있습니다.

 

이렇게 되면 실행시에 지정된 경로에서 바로 .so 파일을 찾게 됩니다. 배포가 더 쉬워지고

사용하기도 더 쉬워지는 겁니다.

 

 그런데, 전, 이걸 모르고 있었습니다. 그러니, 라이브러리 링크 하는데 -_- 계속 .so 가

없다라는 에러가 T.T 아무리 /etc/ld.so.conf 를 지정해줘도 안되길래 고민하다 보니

이런 특성이 있더군요.

 

 여러분들도 조심하시기 바랍니다.