ld-linux-x86-64.so 란?
elf interpreter이며 이를 이용하면 실행 파일과 관련된 shared library를 연결 시켜주는 역활을 합니다.
언제 사용하나?
linux에서 다른 여러 platform에서 프로그램을 돌리고 싶을때 상용합니다. ld-linux-x8-64.so는 shared library path를 실행 시점에 다시 지정 해줄수 있기 때문이 가능 합니다.
핵심
컴파일 환경에서 "ld-linux-x86-64.so"와 "실행 파일"에 필요한 shared library를 실행 할 환경에 복사한 후
"ld-linux-x86-64.so" 로 프로그램을 실행 한다.
상세 사용법
1. compile 환경과 다른 환경에서 프로그램을 실행 합니다.
- 그러면 어떠한 라이브러리가 없다고 나옵니다.
2. compile한 환경의 ld-linux-x8-64.so 를 실행 할 환경에 복사 합니다.
3. compile한 환경에서 1번에서 에러나 library를 복사하여 실행할 환경의 임의의(현기선 lib) 디렉토리게 놓습니다.
- 주로 시스템에 의존성이 강한 library가 대부분 입니다.
Ex) /lib64/libstdc++.so.6
/libc.so.6
2. 실행할 환경에서 ld-linux-x86-64.so 의 --library-path에 3번에서 생성한 디렉토리를 넣은 후 아래와 같이 실행 합니다.
#./ld-linux-x86-64.so --library-path ./lib/ ./get_docker_info
shared library link 과정
- shared library사용시 실행되는 과정을 알아 보겠습니다.
- 실행 파일에서 shared library 찾기
- share library를 메모리에 mapping 시키기
- 메모리에 mapping된 shared-library를 프로그램이 실행 할 수 있게 재배치
- 프로그램 초기화를 실행하여 재배치된 shared-library를 프로그램에 연결합니다.
- 프로그램 실행
참고
https://blog.daum.net/tlos6733/125
https://ezbeat.tistory.com/374
https://gist.github.com/sftblw/924a8a5888af95e3bb187eda5ba82086
https://eli.thegreenplace.net/2011/11/03/position-independent-code-pic-in-shared-libraries/
'프로그래밍 > 리눅스 프로그래밍' 카테고리의 다른 글
[bash] 알면 좋은 팁!! (0) | 2021.06.07 |
---|---|
[bash script] 유용한 bash 스크립트 모음 (0) | 2021.06.07 |
[time] Linux - UTC vs Unix Time vs Local time의 차이 (0) | 2020.04.28 |
[tmux] 1. tmux 개념 및 설치 및 설정 변경 ~/.tmux.conf (0) | 2020.04.04 |
[Multi thread] Multi thread 에서 localtime 문제 (0) | 2020.01.31 |