RX/XE 팁
XE FAQ 는 제가 XE공홈 '묻고 답하기'에 답변한 내용들 중 일부를 정리한 내용입니다. (대부분이 제가 한 답변이죠)
XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
XE Tips 는 제가 XE 공홈에 쓴 XE 관련 유용한 팁들입니다. 기능개선은 공홈에 안 적어둔 XE 유용 개선팁들입니다.
유용정보는 외부 검색을 통해 알아낸 소스등을 기재해둔 곳입니다.
버그 신고내역들은 XE 사용하다가 발견한 버그 패치방법들로, Core Issue 에 기록해뒀기에 XE 에 적용이 되었을 가능성이 있겠죠
제가 쓴 글들에 대해 퍼가실때는 꼭 출처를남겨주시고.. (다만 플래시뷰 기반이기에 퍼가기는조금 힘들 수 있겠죠 ^^;)
타회원의 글들도 적혀있는 출처를 같이 꼭 기재해주세요
sejin7940
조회:1340 2014.12.17 04:45
출처 | 시베리스 |
---|---|
출처URL | http://else102.tistory.com/category |
2011/09/03 12:58
▣ 정적 Lib (확장자 : *.a)
▣ 동적 Lib (확장자 : *.so)
※ fPIC와 fpic의 차이점 : 타겟에 따라 다르게 적용.
( 비 PIC 공유 라이브러리 실행시 재배치에 시간이 소요되고 다른 프로세스와 코드(.text)를 공유 하지 못함.)
- fPIC : 크고 느린코드 생성. 플렛폼에 독립적. CPU에 관계없이 사용할 수 있다.
- fpic : 작고 빠른 코드 생성. CPU에 따라 -fpic로 생성할 수 있는 GOT(Glocal Offset Table)의 크기에 제한이 있다.
▣ 추가적 명령어
※ ld.so는 어떻게 공유 라이브러리를 찾아갈까?
- 기본적으로 /lib 또는 /use/lib 찾아봄. 또한 /etc/ld.so.conf 에 지정된 경로를 찾아보며 계정마다 생성해준
LD_LIBRARY_PATH 에 지정된 경로를 검색.
- 주의점 : /etc/ld.so.conf에 지정된 경로를 찾아보는데, 내용을 변경하거나 시스템 라이브러리를 업그레이드 또는 설치하는 경우,
ld.so 가 경로를 탐색할 때 사용하는 공유 라이브러리 캐시인 /etc/ld.so/chche 를 생성하기 위해 ldconfig 명령 반드시 실행.
- 컴파일시 적용. 컴파일 과정에서 공유 lib 루틴을 사용하지 않고, 프로그램에서 프로그램 소스 상 lib 루틴의 복사본을 갖도록 컴파일. |
① Object 코드 만들기. $ gcc -c source1.c source2.c ② lib 만들기. $ ar r libStatic.a source1.o source2.o ③ lib index 만들기. $ ranlib libStatic.a # 라이브러리 자체 루틴 정보추가 과정 $ ar rs libStatic.a source1.o source2.o # 라이브러리 만들기 + 인덱스 만들기 통합 명령 ④ 각 루틴의 signature가 exturn 형태로 선언된 libStatic.h 만들기. ⑤ 컴파일. $ gcc -I ../include -L ../lib -o main main.c -lStatic # -lStatic : 지금 만든 library링크 |
▣ 동적 Lib (확장자 : *.so)
- 개발이 용이하고, lib 변경시, 재 컴파일 불필요. 하나 이상의 프로세스에서 사용시, 메모리 양과 실행 파일 크기를 줄여줌 (링커 : 메모리 적재) |
① 재배치 코드 생성. ( -fpic, -fPIC : 공유를 위한 위치 독립적 생성 ) $ gcc -c -fpic source1.c source2.c ② 공유 라이브러리 생성. ( 인덱스 과정 불필요. ) $ gcc -shared -o libDynamic.so source1.o source2.o ③ 정적인 경우와 동일. ( *.a 와 *.so 가 있다면 *.so 선택적 수행 ) $ gcc -I ../include -L ../lib -o main main.c -lDynamic ④ 꼭 정적인 라이브러리를 링크 시키고자 할때. $ gcc -I ../include -L ../lib -o main main.c libStatic.a |
※ fPIC와 fpic의 차이점 : 타겟에 따라 다르게 적용.
( 비 PIC 공유 라이브러리 실행시 재배치에 시간이 소요되고 다른 프로세스와 코드(.text)를 공유 하지 못함.)
- fPIC : 크고 느린코드 생성. 플렛폼에 독립적. CPU에 관계없이 사용할 수 있다.
- fpic : 작고 빠른 코드 생성. CPU에 따라 -fpic로 생성할 수 있는 GOT(Glocal Offset Table)의 크기에 제한이 있다.
▣ 추가적 명령어
- 라이브러리 갱신 $ ldconfig - 프로세스 링크 된 라이브러리 보기 $ ldd { 컴파일된 프로세스 } - 라이브러리 모여있는 곳 ( 타겟 설정마다 다를 수 있음 ) $ cd /etc/local/lib - 라이브러리 경로 설정 $ vi /etc/ld.so.conf $ include /etc/ld.so.conf.d/*.conf # /etc/ld.so.conf.d 의 모든 conf 를 include |
※ ld.so는 어떻게 공유 라이브러리를 찾아갈까?
- 기본적으로 /lib 또는 /use/lib 찾아봄. 또한 /etc/ld.so.conf 에 지정된 경로를 찾아보며 계정마다 생성해준
LD_LIBRARY_PATH 에 지정된 경로를 검색.
- 주의점 : /etc/ld.so.conf에 지정된 경로를 찾아보는데, 내용을 변경하거나 시스템 라이브러리를 업그레이드 또는 설치하는 경우,
ld.so 가 경로를 탐색할 때 사용하는 공유 라이브러리 캐시인 /etc/ld.so/chche 를 생성하기 위해 ldconfig 명령 반드시 실행.