[ CnUnix ] in KIDS 글 쓴 이(By): HellCat ((void*)0) 날 짜 (Date): 1994년03월20일(일) 01시12분19초 KST 제 목(Title): 답:[질문] sun의 libxx.sa.xx 태양의 경우 *.sa.* 는 initialized 데이타를 말합니다. 즉 이 *.sa.* 에 있는 데이타는 global 로서 예를 들면 test.c 에서 #ifdef SHLIB struct junk dummy = { 1, "정크", 2, "또정크" }; endif 라고 달랑 넣어 놓구. test2.c 에서 #ifdef SHLIB extern struct junk dummy; #else struct junk dummy = {1, "정크", 2, "또정크" }; endif 이렇게 해놓았을 경우. 스테틱 라이브러리 *.a 를 만들 경우엔 test.c 는 콤파일해서 ar 하지 않고 test2.c 하나만 콤파일 해서 ar 해 줍니다. 그리고 세어드 라이브러리 만들 경우엔 test2.c 는 -DSHLIB 을 정해서 콤파일 할때 dummy 는 엑스터널로 쓰게 해주고 test2.o 는 *.so.* 에 들어 가게 해주고 test.o 는 *.sa.* 에 낑겨 집니다. 즉 글로벌로 정해지고 그 라이브러리 안에서 initialize 되어서 export 되는 데이타는 shared lib. 만들땐 *.sa.* 로 몰아서 들어가고 그걸 사용하는 오브젝트는 *.so.* 로 몰아 놓습니다. 근데 뻬리깡님의 문제는 그냥 한번 ranlib * 를 라이브러리 몰아 놓은데 돌려 주면 해결 될거에요. 단 위의 것은 태양의 경우라는 걸 꼭 기억하세요. SYS-5.4.* 는 좀 달라 졌을꺼에요. 이노므 세어드라이브러리 만들라면 엄청 머리 굴려야 해요. 2/28 일 까정 건들지 말것! (2 년 프로젝트 마감날) |