'Open Source'에 해당되는 글 38건
- 2012.10.30 Java Jni C Makefile
- 2011.05.19 Looper, Thread, Handler 의 관계!!
- 2011.05.04 사용되는 함수 인수변경에 따른 매크로 사용으로 파급 효과 최소화 하기
컴파일러 환경은 Sun Unix Spark cc 기준
환경이 다를 경우
CC 의 컴파일러 변경
INC의 java include 위치 변경
CFLAGS 의 옵션변경
Lib 생성시 -G 옵션을 해당 컴파일러 옵션에 맞겨 변경
Makefile
.SUFFIXES: .c .o .java .class CC = cc JC = javac INC = -I/usr/java/include -I/usr/java/include/solaris SRCS = Source.c OBJS = $(SRCS:.c=.o) JAVASRC = Package/Source.java CLASS = $(JAVASRC:.java=.class) CFLAGS = -g -c JFLAGS = -g .c.o: $(CC) $(INC) $(CFLAGS) $< .java.class: $(JC) $(JFLAGS) $< all : JniLib : $(OBJS) $(CC) -G $(OBJS) -o libShmData.so JavaCls : $(CLASS) clean : rm -rf $(OBJS) |
Lib Compile시 오류가 날 경우 LD_LIBRARY_PATH, CLASSPATH 를 export로 확인 후 재 컴파일
jni로 C Header File을 작성 할 경우 Command
javah -jni Packge.Class
여기서 주의 해야 할 점은 Java 컴파일러로 Class File을 생성시에는 Package/JavaSourceFile.java 형태를 띄지만 javah로 Header File 작성시에는 Package.JavaClass 형태라는 것이다.
LogMsg(char *Task, chark *Msg, char *Path)형으로 변경시
LogMsg함수를 사용하는 모듈 전체를 찾아서 해당 인수를 2개에서 3개로 변환 해야 하는 작업을 해 줘야 된다
이럴 경우 LogMsg를 사용하는 모듈들이 많을 경우 일일이 찾아서 해당 내용을 전부 변경해 줘야 하는 번거로움이 있다
이럴 경우 메크로를 이용하여 해당 내용을 최소하 하면 간단하게 해결 될 수 있다
기존 사용하던 LogMsg 함수명을 다른 함수 명으로 변경을 해준다
LogMsg -> Com_LogMsg
그리고 기존 인수를 3개로 추가 한다 그러면 최종
Com_LogMsg(char *Task, chark *Msg, char *Path)
형을 갖는 새로운 함수를 정의한다 물론 내용도 조금 변경이 될 것이다.
그리고 메크로 함수를 기존이름과 같은 형태로 지정 한다
#defile LogMsg(A, B) Com_LogMsg(A, B, "지정Path")
이런식으로 만들어 지면 모듈수정시 변경해야 되는 파급효과를 최소한으로 줄일 수가 있다!!