linux/system programming2011. 6. 26. 04:15
리눅스에서 공유라이브러리를 로드하고 참조 함수를 확인하는 프로그램을 동적로더(ld.so) 라고한다.
이 로더는 /etc/ld.so.conf
에 설정된 경로를 이용하여 공유 라이브러리를 검색한다.

이 구성 파일에 경로를 추가한뒤 ldconfig 명령을 이용하여 캐쉬를 업데이트한다.
 

1. 공유라이브러리 예
 


1. myshared.c 파일을 만든다
2. $ gcc -c -fPIC myshared.c   ====> 공유라이브러리 함수로 컴파일 할때는
독립한 코드로 만들기 위해 -fPIC 옵션을 이용한다 
 

3. 공유 라이브러리 파일을 만들기위해 ar을 이용하는 것이 아니라 
gcc의 -shared 옵션을 이용하여 생성한다.


$ gcc -shared -o libmyshared.so myshared.o
그러면 libmyshared.so 파일 즉 공유 라이브러리 파일일 만들어진것을 알수 있다.

공유라이브러리 호출


1. mymain2.c 생성

 2.$ gcc mymain2.c -o mymain2 -lmyshared -L. 
===> 명령어로 컴파일을한다
3. ldd mymain2 실행한다
라이브 파일을 찾을수 없다고 나온다


해결책은?
 
방법 1 etc/ld.so.conf 파일에 경로를 설정한후 ldconfig로 캐쉬를 갱신하면된다
우선 etc/ld.so.conf 파일을 열어보자

ld.so.conf폴더안에 *.conf 란 파일명으로 만들면 포함된다는뜻이다

즉 ld.so.conf 안에 원하는파일 명 나는 mymain2.conf 를 만들고
libmyshared.so 파일의 전체경로를 적어둔다

그런다음 ldconfig 로 캐쉬를 갱신한다

방법2 
LD_LIBRARY_PATH 환경변수를 이용하여 공유라이브러리를 설정할수 있다.

1. 현재 설정되어 있는 동적 라이브러리 경로를 조회
$ echo $LD_LIBRARY_PATH
2. 동적라이브러리 경로 추가



- 리눅스는 시스템 부팅시에 /etc/profile을 실행하므로 이곳에
LD_LIBRARY_PATH 변수값을 지정하면 시스템 부팅시에도 
공유 라이브러리의 경로가 자동으로 설정된다.

최종 출력

 잘 출력 되는걸 알수 있다

Posted by babuzzzy