라이브러리 - 해당되는 글 2건

1.ar r mylib.a *.o 오브젝트 파일을 하나로 묶는다
   ls해보면 mylib이라는 파일이 생겨버렸다.
   .a파일을 만들어서 정적라이브러리로 만들어서 쓸수 있다.

사용자 삽입 이미지

1

2.실행해보면 실행된다.
사용자 삽입 이미지

2


3.되는거 알았으니까 오브젝트 파일 지우고 ls해서 보면 지워져있다.
     그리고 gcc -fPIC -c minus.c plus.c 오브젝트 파일을 생성한다.
     cc1 컴파일러에게 위치(메모리)에 관계 없이 수행되는 코드로 컴파일 하라는 옵션
     파일이 어떻게 돌아갈지 모르기때문에
사용자 삽입 이미지

3

4.gcc -shared -Wl,-soname,libmy.so.0 -o libmy.so.0.0.0 *.o
         -shared : shared object를 생성하라는 옵션
         -Wl: -Wl옵션 뒤에 오는 옵션 들을 링커에게 바로 전달하라는 옵션
         -soname,libmy.so.0 : 동적 링커에게 soname libmy.so.0와 같은 형식으로 바로 전달
   주의 해야 할점은 띄어쓰기를 제대로 해야된다.제대로 안하면 아래처럼 에러다
사용자 삽입 이미지

4

5.카피해서 /usr/lib에 복사하려고했으나 이름이 계속있어서 여기에서 그냥 다시 이름을 바꺼서 만들었다.
   libtest.so.0.0.0 으로
   ln -s /usr/lib/libtest.so.0.0.0을  /usr/lib/libtest.so.0으로 심볼릭 링크를한다.
    --> 동적 링크를 위한 파일
   ln -s /usr/lib/libtest.so.0.0.0을  /usr/lib/libtest.so으로 심볼릭 링크를한다.\
   --> gcc 링크를 위한파일
   전에 만든 rm libmy.so.0.0.0은 안쓰는거니까 파일을 정리하는 차원에서 지워준다.
   만든 라이브러리 사용하기 (.a와 .so가 둘 다 있으면 .so를 선택)
   gcc test.c -ltest -o test  
사용자 삽입 이미지

5

6. 컴파일했으니까 되나 실험해보면된다.
    gcc test.c mylib.a -o test_s 라이브러리를 이용해서 컴파일하면 실행 파일이 아래와 같이 test_s로 출력
사용자 삽입 이미지

6

7.gcc test.c mylib.a -o test_s -static을 사용해서  파일을 만들어서 보면  정적으로 모든 파일을
   다 컴파일 해버려서 용량이 커진것을 볼수있다.
사용자 삽입 이미지

7

 



      리눅스  |  2007. 9. 6. 12:10




------------------------------------------------------------------------------------------------
 정적 라이브러리
    장점
    컴파일 하는 경우 속도가 빠름
   단점
   사이즈가 큼
동적 라이브러리
  장점
   사이즈가 작음
   단점
   컴파일 하는 경우 속도가 느림
  바이너리를 배포할 때 컴파일 할 당시에 사용한 공유 라이브러리와 같은 메이저 버전을 가지고 공유 라이브러리가 있는 시스템에서만 동작 함
---------------------------------------------------------------------------------------------------------------
 공유 라이브러리의 추가 장점
 라이브러리 변경 시 정적 라이브러리는 컴파일한 모든 파일들을 바꾸어야 하지만 공유 라이브러리는 공유 라이브러리만 바꾸어 주면 된다.
 이유 : 공유 라이브러리는 실행 시 공유 라이브러리와 링크 되기 때문
---------------------------------------------------------------------------------------------------------------
오브젝트 만들기
 gcc -fPIC -c plus.c minus.c
-fPIC : cc1 컴파일러에게 위치(메모리)에 관계 없이 수행되는 코드로 컴파일 하라는 옵션
 파일이 어떻게 돌아갈지 모르기때문에
---------------------------------------------------------------------------------------------------------------
라이브러리 만들기 (인덱스 과정 불필요)
 gcc -shared -Wl,-soname,libmy.so.0 -o libmy.so.0.0.0 plus.o minus.o
-shared : shared object를 생성하라는 옵션
-Wl: -Wl옵션 뒤에 오는 옵션 들을 링커에게 바로 전달하라는 옵션
-soname,libmy.so.0 : 동적 링커에게 soname libmy.so.0와 같은 형식으로 바로 전달
---------------------------------------------------------------------------------------------------------------
라이브러리를 만든 후 libmystuff.so.0.0.0의 심볼릭 링크를 만들기
ln -s libmy.so.0.0.0 libmy.so.0   
     --> 동적 링크를 위한 파일
ln -s libmy.so.0.0.0 libmy.so      
     --> gcc 링크를 위한 파일
---------------------------------------------------------------------------------------------------------------
동적 링커(/lib/ld-linux.so.2)가 찾을 수 있도록 디렉토리 설정하기
/etc/ld.so.conf 파일을 열어 libmy.so.0.0.0 파일이 있는 디렉토리를 추가한다.
/etc/ld.so.conf에 지정된 디렉토리를 찾아 다니면서 새로운 심볼릭 링크를 만들고 동적 링커가 읽어 들이는 /etc/ld.so.cache 파일을 새로 갱신한다.
ldconfig
/usr/lib 디렉토리에 만든 라이브러리를 복사하면 위의 절차는 필요가 없다.
---------------------------------------------------------------------------------------------------------------
만든 라이브러리 사용하기 (.a와 .so가 둘 다 있으면 .so를 선택)
 gcc -o 16_9 16_9.c -lmy -L.


      리눅스  |  2007. 9. 6. 11:07



sokoban's Blog is powered by Daum & Tattertools