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