리눅스에서 공유라이브러리를 로드하고 참조 함수를 확인하는 프로그램을 동적로더(ld.so) 라고한다.
이 로더는 /etc/ld.so.conf
에 설정된 경로를 이용하여 공유 라이브러리를 검색한다.
이 구성 파일에 경로를 추가한뒤 ldconfig 명령을 이용하여 캐쉬를 업데이트한다.
1. myshared.c 파일을 만든다
2. $ gcc -c -fPIC myshared.c ====> 공유라이브러리 함수로 컴파일 할때는
독립한 코드로 만들기 위해 -fPIC 옵션을 이용한다
===> 명령어로 컴파일을한다
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 변수값을 지정하면 시스템 부팅시에도
공유 라이브러리의 경로가 자동으로 설정된다.
최종 출력
잘 출력 되는걸 알수 있다
이 로더는 /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 생성
===> 명령어로 컴파일을한다
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 변수값을 지정하면 시스템 부팅시에도
공유 라이브러리의 경로가 자동으로 설정된다.
최종 출력
잘 출력 되는걸 알수 있다
'linux > system programming' 카테고리의 다른 글
쓰레드 란? (0) | 2011.07.08 |
---|---|
2. 시스템 정보 - 오류처리 (0) | 2011.06.27 |
리눅스 라이브러리 함수를 만들어보자 -정적 라이브러리 생성 (0) | 2011.06.26 |
6. 리눅스 시스템 프로그래밍 - strace 와 ltrace (2) | 2011.06.26 |
5. 리눅스 시스템 프로그래밍 - 디버깅 (1) | 2011.06.26 |