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

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

(1) 공유라이브러리 생성
 


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

○ 
공유 라이브러리 파일을 만들기위해 ar을 이용하는 것이 아니라 
gcc의 -shared 옵션을 이용하여 생성한다.
$ gcc -shared -o libmyshared.so myshared.o
: 그러면 libmyshared.so 파일 즉 공유 라이브러리 파일일 만들어진것을 알수 있다.


(2) 공유라이브러리 호출


○ mymain2.c 생성

○ $ gcc mymain2.c -o mymain2 -lmyshared -L. 
: 명령어로 컴파일을한다.

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 환경변수를 이용하여 공유라이브러리를 설정할수 있다.

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



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


(3) 최종 출력

 잘 출력 되는걸 알수 있다.



※ 출처 : http://babuzzzy.tistory.com/entry/2-라이브러리를-만들어보자

by 민트앤라떼 2011. 9. 30. 10:38