일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 프로젝트 네임변경 후 이클립스 로딩시 에러
- apt-get update 오류
- expected at least 1 bean which qualifies as autowire candidate
- postgres install
- grep
- svn log
- VirtualBox
- mysql dml
- WH question
- svn
- NEXUS
- Store password unencrypted
- Remmina
- Oracle install
- svn 사용법
- svn update
- svn 변경된 파일 추출
- Cannot prepare internal mirrorlist: No URLs in mirrorlist
- javax.servlet.GenericFilter
- 포스트그레스 설치
- svn commit
- ant
- xrdp
- Failed to download metadata for repo 'appstream'
- docker oracle12c
- svn load
- docker 폐쇄망
- svn 특정 리비전 사이 추출
- taskkill
- svn dump
- Today
- Total
기억의 습작
라이브러리란 무엇인가? 본문
프로그램에서 공통으로 사용할 수 있는 기능을 포함하고 있는 오브젝트 파일이다.
동적 라이브러리란 무엇인가?
프로그램을 컴파일하여 생성되는 바이너리에 포함하지 않고 바이너리가 실행하는 시점 또는 실행 후에 포함시킬 수 있도록 제작된 라이브러리를 말한다. 그래서 동적이라는 이름이 붙은듯!! 이런 형식의 라이브러리는 프로그램을 실행할 때 호출되는 로더에 의해서 메모리에 적재된다.
동적 라이브러리를 호출하기 위해서는 path 지정이 필수이다. 해당 라이브러리가 어디에 위치해 있는지 모든 디렉토리를 탐색하기에는 비효율적이기 때문이다. 우리가 흔히 설정하는 LD_LIBRARY_PATH 환경변수가 동적 라이브러리 호출을 위한 path 지정에 사용되는 환경 변수이며 또 다른 방법으로 시스템 설정을 통해서 지정할 수 있다. 이때 사용되는 설정 파일이 리눅스 기준으로 /etc/ld.so.conf 파일이 되겠다. 리눅스 Kernel 2.6 이후 부터 /etc/ld.so.conf.d 디렉토리에 *.conf 파일 형식으로 설정할 수 있다.
로더는 LD_LIBRARY_PATH 또는 ld.so.conf 에 명시된 디렉토리에서 동적 라이브러리를 찾으며 해당 디렉토리에 없으면 Not Found 에러를 출력한다. 컴파일시 link 오류나 실행시 loading 오류를 만나게 된다면 위 두가지 설정을 점검해 보기 바란다.
LD_LIBRARY_PATH 나 ld.so.conf 두군대 모두에게 설정될 필요는 없으나 다음과 같은 경우에는 ld.so.conf 에 설정하도록 유의해 보자. 바이너리에 setuid, setgid 등이 설정된 경우 리눅스의 로더는 LD_LIBRARY_PATH 환경 변수 설정을 무시해 버린다고 한다. 그도 그럴것이 악의적으로 시스템 주요 함수들이 setuid를 가진 바이너리가 호출한 라이브러리에 의해서 오버라이딩 된다면??? 끔직할 것이다. 그런 보안을 고려한 것인지 모르겠지만 로더는 ( uid != euid || gid != egid ) 상황에서 LD_LIBRARY_PATH 를 무시하기 때문에 아무리 컴파일시에 link가 정상이고 ldd로 확인해도 정상이지만 바이너리 실행시 해당 라이브러리를 찾을 수 없다는 오류를 만나게 될 것이다. 이런 경우는 LD_LIBRARY_PATH가 아니라 ld.so.conf 에 설정을 해줘야 한다.
관련 명령어
•ldconfig - /etc/ld.so.conf 설정된 동적 라이브러리 정보를 /etc/ld.so.cache 파일로 만들어 주는 일을 한다. 이로서 로더는 ld.so.cache 정보를 기반으로 보다 빠르게 라이브러리를 찾아 낼 수 가 있다. ld.so.conf 설정을 변경하면 반드시 ldconfig 명령을 수행하여 cache 를 갱신해 주도록 하자. ldconfig ldconfig -p •ldd - 공유 라이브러리의 의존성을 검사해 준다. 동적 라이브러리도 공유 라이브러리 이므로 link 시나 load 시에 에러가 난다면 점검을 해보자. ldd <binary name> • objdump - 오브젝트 파일에 대한 정보를 출력해 준다. Dynamic Section의 NEEDED 로 표기된 항목이 공유 라이브러리를 표시한다고 한다. objdump -p <object(binary) name> |
'OS > Linux' 카테고리의 다른 글
네트워크 카피 SCP (0) | 2021.08.28 |
---|---|
SSH 접속시 패스워드 묻지 않도록 하는 방법 (0) | 2021.08.28 |
리눅스 압축 사용법 (0) | 2021.08.28 |
리눅스 명령어 tree 오픈소스 (0) | 2021.08.26 |
리눅스 절전모드, 최대절전모드 명령어 (0) | 2021.08.21 |