글
■ 리눅스에서 공유라이브러리를 로드하고 참조 함수를 확인하는 프로그램을 동적로더(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-라이브러리를-만들어보자
'P rogramming > Linux System' 카테고리의 다른 글
strace 와 ltrace - 시스템콜 / 라이브러리 함수 추적 (0) | 2011.09.30 |
---|---|
디버깅 - gdb (0) | 2011.09.30 |
정적 라이브러리 생성 (0) | 2011.09.30 |
정적 라이브러리의 구조 - ar, ranlib (0) | 2011.09.29 |
정적 라이브러리 와 공유 라이브러리 (0) | 2011.09.29 |
RECENT COMMENT