'Open Source/Java'에 해당되는 글 6건
- 2012.10.30 Java Jni C Makefile
- 2011.05.19 Looper, Thread, Handler 의 관계!!
- 2009.01.24 Tokenizer를 이용한 String 잘라 내기
컴파일러 환경은 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 형태라는 것이다.
/* 문자열 형식 "201 Data_for_Client" ID Data 이둘을 분리해줌.. 통신을 위한 Data형식을 맞춤 */ import java.util.StringTokenizer; public class TkenTest { private StringTokenizer token; private String ClientData[]; private int DataID[]; private int DataCount; public TkenTest(String FullData) { token = new StringTokenizer(FullData," ");//data형식 정의 this.DataCount = (token.countTokens()/2); init();//초기화 } private void init() { //인수 셋팅 this.ClientData = new String[this.DataCount]; this.DataID = new int [this.DataCount]; int i = 0; String temp[]= new String[token.countTokens()]; while(token.hasMoreTokens()) { temp[i] = token.nextToken(); i++; } int j = 0;//배열지정 인수 for(i=0;i<=DataCount;i+=2) { DataID[j] = Integer.parseInt(temp[i]); j++; } j=0;//초기화 for(i=1;i<=(DataCount+1);i+=2) { this.ClientData[j] = temp[i]; j++; } } public int getDataCount() { return this.DataCount; } public int getDataID(int ID) { if(ID>this.DataCount) return -1;//오류메시지 출력 else return this.DataID[ID-1]; } public String getData(int ID) { if(ID>this.DataCount) return null;//오류메시지 출력 else return this.ClientData[ID-1]; } }