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



sokoban's Blog is powered by Daum & Tattertools