GCJ
[edit]
1.1 »ç¿ëȯ°æ ¶GCJ´Â gccÀÇ ÀϺÎÀ̱⠶§¹®¿¡ gcc¸¦ »ç¿ëÇÒ ¼ö Àִ ȯ°æÀÌ µÇ¾î¾ß ÇÑ´Ù.
±âº»ÀûÀ¸·Î ¸®´ª½º¿¡¼´Â »ç¿ëÀÌ °¡´ÉÇϸç À©µµ¿ìÁî¿¡¼ http://www.mingw.org ¿¡¼ Á¦°øÇÏ´Â °ÍÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
[edit]
1.2 °£´ÜÇÑ ¿¹Á¦ ¶public class ExamGCJ { public static void main(String[] args) { System.out.println("ExamGCJ Class GCJ Test"); } }
# gcj --main=ExamGCJ ExamGCJ.java -o ExamGCJ
[edit]
1.3 µÎ°³ ÀÌ»óÀÇ Å¬·¡½º·Î ÀÌ·ç¾îÁø ÄÚµå ÄÄÆÄÀÏ ¶public class ExamGCJ { public static void main(String[] args) { System.out.println("Two Class GCJ Test"); new LibExamGCJ(); } } public class LibExamGCJ { LibExamGCJ() { System.out.println("Two Class GCJ Test --- this is print in lib"); } } # gcj -c LibExamGCJ.java # gcj -c ExamGCJ.java # gcj --main=ExamGCJ ExamGCJ.o LibExamGCJ.o -o ExamGCJ [edit]
1.4 ¹ÙÀÌÆ®ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏ ¶ÄÄÆÄÀÏ ÇÒ ¶§ .java ´ë½Å .class ÆÄÀÏÀ» ³Ö¾îÁÖ¸é ÄÄÆÄÀÏµÈ ¹ÙÀÌÆ® ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏÀÌ °¡´ÉÇÏ´Ù.
# gcj -c LibExamGCJ.class
ForeachExam.java:16: error: Invalid declaration. for(File f : fileList){ ^ [edit]
1.5 ¶óÀ̺귯¸®·Î ¹¾î¼ »ç¿ëÇϱ⠶ºÐ¸í ¾î¶² ¾ð¾î·Î ÇÁ·Î±×·¡¹ÖÀ» ÇϵçÁö ÀÚÁÖ ¾²´Â Äڵ带 ¹¾îµÎ°í »ç¿ëÇÏ´Â °ÍÀÌ Æí¸®ÇÏ´Ù.
GCJ¿¡¼µµ ÀÚÁÖ »ç¿ëÇÏ´Â Äڵ带 ¹¾îµÎ°í ÇÊ¿äÇÒ¶§ »ç¿ëÇÏ´Â ¹æ¹ýÀÌ Á¸ÀçÇÑ´Ù.
GCJ´Â GCCÀÇ ÀϺδÙ. µû¶ó¼ GCCó·³ ¶óÀ̺귯¸®¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù.
ÇÊÀÚ´Â ¸®´ª½º¸¦ ÀÚÁÖ »ç¿ëÇÏÁö ¾Ê´Â´Ù. µû¶ó¼ ¿©±âÀÇ ¼³¸íÀÌ À©µµ¿ìÁîÀÇ MinGW¿¡¼ÀÇ ÀÛ¾÷¿¡ ÃÊÁ¡ÀÌ ¸ÂÃß¾îÁ® ÀÖ´Ù´Â °ÍÀ» Âü°íÇϱ⠹ٶõ´Ù.
# ar -crs libexam.a LibExamGCJ.o
¾Æ¹«Æ° ÀÌ·¸°Ô »ý¼ºÇÑ °ÍÀ» °°ÀÌ ¸µÅ©ÇÏ¸é µÇ´Âµ¥ ±×°Í¿ª½Ã GCC¿Í µ¿ÀÏÇÏ´Ù.
# gcj --main=ExamGCJ ExamGCJ.o -L.\ -lexam
µû¶ó¼ LibExamGCJ¿Í °°ÀÌ ¶óÀ̺귯¸®·Î ¹À» ¼Ò½º ÄÚµå´Â ¹ÙÀÌÆ® ÄÚµå·Îµµ »ý¼ºÇؼ Jar·Î ¹¾îµÎ°í
ÀÌ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â °æ¿ì¿¡ Ŭ·¡½º ÆÐ½º¿¡ Æ÷ÇÔ½ÃŰ´Â °ÍÀÌ ÁÁ´Ù.
# gcj -C LibExamGCJ.java # jar cf swt.jar LibExamGCJ.class [edit]
2 ÆÐŰÁö¸¦ ¶óÀ̺귯¸®È Çϱ⠶GCJ´Â ÁÖ·Î Native Code¸¦ »ý¼ºÇϱâ À§ÇØ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯À̱⠶§¹®¿¡ ÀÚ¹Ù·Î ÀÌ·ç¾îÁø ÆÐŰÁö¸¦ ¶óÀ̺귯¸®ÈÇÏ¿© ¸µÅ©ÇÏ´Â °ÍÀÌ ¿øÇÒÇÑ °³¹ßÀ» À§ÇØ ¹Ù¶÷Á÷ÇÏ´Ù. ƯÈ÷ ¸µÅ©ÇÒ¶§ ¿ÀºêÁ§Æ®ÄÚµå(.o)´Â »ç¿ëÇÏÁö ¾Ê¾Æµµ °°ÀÌ ¹Áö¸¸ Á¤Àû¸µÅ©¶óÀ̺귯¸®(.a)´Â ÇÊ¿äÇÑ °Í¸¸ ¹¾îÁö¹Ç·Î ¶óÀ̺귯¸®È ÇØ¼ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯¸é ±× ¹æ¹ýÀ» ÇϳªÀÇ ¿¹Á¦¿Í ÇÔ²² °£´ÜÈ÷ ¼Ò°³ÇϰíÀÚ ÇÑ´Ù.
[edit]
2.1 ÆÐŰÁö ¾ÈÀÇ ¿ÀºêÁ§Æ®ÄÚµåÀÇ À̸§Àº ¾î¶»°Ô Á¤ÇØÁö´Â°¡? ¶ÆÐŰÁöÀÇ ±¸¼ºÀ» º¸¸é º¸Åë ÀÌ·± ÇüÅ·ΠµÇ¾î ÀÖÀ» °ÍÀÌ´Ù.
java.util.Vector
À§¿¡ º¸¸é ¾Ë ¼ö ÀÖµíÀÌ java.util ÆÐŰÁöÀÇ VectorŬ·¡½ºÀÌ´Ù. ±×¸®°í ¼Ò½º ÄÚµå ³»¿¡¼ »ç¿ëÇÏ·Á¸é ´ÙÀ½Ã³·³ import¸¦ ÇÑ´Ù.
import java.util.Vector
¹°·Ð GCJ·Î ÄÄÆÄÀÏ ÇÒ ¼Ò½ºµµ ¶È°°ÀÌ ÇÑ´Ù. ±×·³ À̰ÍÀ» »ç¿ëÇÑ Äڵ带 ¸µÅ©ÇÒ¶§´Â ¾î¶² À̸§À» °¡Áø ¿ÀÇÁÁ§Æ®°¡ ÇÊ¿äÇѰ¡?
¹Ù·Î ´ÙÀ½°ú °°Àº À̸§À» °¡Áø ¿ÀºêÁ§Æ® Äڵ尡 ÇÊ¿äÇÏ°Ô µÈ´Ù. ¶óÀ̺귯¸® ¾È¿¡¼ À̾߱âÀÌ´Ù.
java_util_Vector.o
±×¸®°í ½ÇÁ¦·Î libgcj.a¾È¿¡ Á¸ÀçÇÑ´Ù. ¾Æ¹«Æ° ±×·¸°Ô ¶óÀ̺귯¸®¸¦ ¸¸µé¾îµÎ°í ÇÊ¿äÇÒ¶§¸¶´Ù... Áï ÇØ´ç ÆÐŰÁö¸¦ »ç¿ëÇÒ¶§¸¶´Ù ¿ÀÇÁÁ§Æ® Äڵ尡 ¾Æ´Ñ ¶óÀ̺귯¸®¸¦ ¸µÅ©Çؼ »ç¿ëÇÏ¸é µÈ´Ù.
[edit]
2.2 °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ¼ ÀÌÇØÇϱ⠶ÀÌÁ¦ °£´ÜÇÑ ¿¹Á¦¸¦ ÅëÇØ¼ ÀÌÇØÇØ º¸ÀÚ. ÀÌÂëµÇ¸é ¾ÕÀÇ "GCJÀÇ °£´ÜÇÑ ¼Ò°³"¿¡¼´Â »ç¿ëÇÏÁö ¾Ê¾ÒÁö¸¸ MakefileÀ» »ç¿ëÇÏ´Â°Ô ÆíÇÒ °ÍÀÌ´Ù. ¹°·Ð GCC¸¦ »ç¿ëÇϽô ºÐµéÀº ´ç¿¬È÷ ¹Þ¾Æµé¿©Áö°ÚÁö¸¸ JAVA¸¸ ÇϽôø ºÐµéÀº Á¶±Ý ¾î»öÇϽÇÁöµµ ¸ð¸¥´Ù. º¸Åë ÀÚ¹Ù·Î ÇÁ·Î±×·¡¹ÖÀ» Çϸé Apache ProjectÀÇ Ant°¡ ±× ºñ½ÁÇÑ ¿ªÇÒÀ» Çϱ⠶§¹®¿¡ Ant°¡ Àͼ÷ÇÒ °ÍÀÌ´Ù.
¾Æ¹«Æ° ÀÌÁ¦ ¿ì¸®´Â GCC(Gnu Compiler Collection)À» »ç¿ëÇÏ´Ï Gnu Make ToolÀÎ MakefileÀ» »ç¿ëÇÒ °ÍÀÌ´Ù. ±×¸®°í MakefileÀÇ º¹ÀâÇÑ °ÍÀº ¸ðµÎ Á¦¿ÜÇÏ°í ²À ÇÊ¿äÇÑ ´Ü¼øÇÑ °Í¸¸ »ç¿ëÇÒ °ÍÀ̹ǷΠ°ÆÁ¤ÇÏÁö ¾Ê¾Æµµ µÈ´Ù. Ȥ½Ã Makefile¿¡ ´ëÇÑ ³»¿ëÀ» ¸ð¸£½Å´Ù¸é kldp.org¿¡¼ ã¾Æ¼ °¡º±°Ô Àо±â ¹Ù¶õ´Ù.
±×·³ ÀÌÁ¦ ½ÃÀÛÇϵµ·Ï ÇϰڴÙ. ¸ÕÀú µð·ºÅ丮 ±¸¼ºÀ» °£´ÜÈ÷ »ìÆìº¸ÀÚ. Á¸ÀçÇÏ´Â µð·ºÅ丮´Â ´ÙÀ½°ú °°´Ù.
./bin ./obj ./lib ./src
./src/org/nahome/hangulee/
package org.nahome.hangulee; public class LibExamGCJ { LibExamGCJ() { System.out.println("Two Class GCJ Test --- this is print in lib"); } } package org.nahome.hangulee; public class LibExamGCJ2 { LibExamGCJ2() { System.out.println("Two Class GCJ Test --- this is print in lib2"); } } CLASSPATH = ./src; OBJS = \ obj/org_nahome_hangulee_LibExamGCJ.o \ obj/org_nahome_hangulee_LibExamGCJ2.o CLASSES = \ bin/org/nahome/hangulee/LibExamGCJ.class \ bin/org/nahome/hangulee/LibExamGCJ2.class all:$(OBJS) $(CLASSES) exam.jar lib/libexam.a lib/libexam.a: ar -crs ./lib/libexam.a ./obj/*.o exam.jar: jar cf exam.jar -C bin . bin/org/nahome/hangulee/LibExamGCJ.class:src/org/nahome/hangulee/LibExamGCJ.java gcj -C -fCLASSPATH=$(CLASSPATH) -d bin src/org/nahome/hangulee/LibExamGCJ.java obj/org_nahome_hangulee_LibExamGCJ.o:src/org/nahome/hangulee/LibExamGCJ.java gcj --classpath=$(CLASSPATH) -c src/org/nahome/hangulee/LibExamGCJ.java \ -o obj/org_nahome_hangulee_LibExamGCJ.o bin/org/nahome/hangulee/LibExamGCJ2.class:src/org/nahome/hangulee/LibExamGCJ2.java gcj -C -fCLASSPATH=$(CLASSPATH) -d bin src/org/nahome/hangulee/LibExamGCJ2.java obj/org_nahome_hangulee_LibExamGCJ2.o:src/org/nahome/hangulee/LibExamGCJ2.java gcj --classpath=$(CLASSPATH) -c src/org/nahome/hangulee/LibExamGCJ2.java \ -o obj/org_nahome_hangulee_LibExamGCJ2.o ÀÚ!.. ÀÌÁ¦ °£´ÜÇÑ ¶óÀ̺귯¸®°¡ ÁغñµÇ¾ú´Ù.
[edit]
2.3 ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ °£´ÜÇÑ ¿¹Á¦ ¶¿¹Á¦´Â ´Ù¸¥ µð·ºÅ丮¿¡´Ù°¡ ¸¸µéµµ·Ï ÇÒ °ÍÀÌ´Ù. ±×¸®°í À̹ø¿¡´Â Makefile¾øÀÌ °£´ÜÈ÷ ÄÄÆÄÀÏ ÇÏ´Â °ÍÀ¸·Î ³¡³»µµ·Ï ÇÒ°ÍÀÌ´Ù.. ¿ì¼± ´ÙÀ½°ú °°Àº ÆÄÀÏÀ» ¸¸µç´Ù.
import org.nahome.hangulee.*; public class ExamGCJ { public static void main(String[] args) { System.out.println("Two Class GCJ Test"); new LibExamGCJ(); new LibExamGCJ2(); } } gcj --classpath=(À§ ¿¹Á¦°¡ ÀÖ´Â µð·ºÅ丮 °æ·Î)/exam.jar -c ExamGCJ.java -o ExamGCJ.o gcj --main=ExamGCJ ExamGCJ.o -L(À§ ¿¹Á¦°¡ ÀÖ´Â µð·ºÅ丮 °æ·Î) -lexam -o ExamGCJ Two Class GCJ Test Two Class GCJ Test --- this is print in lib Two Class GCJ Test --- this is print in lib2
(À§ ¿¹Á¦°¡ ÀÖ´Â µð·ºÅ丮 °æ·Î)/src
[edit]
3 Class.forName¸¦ »ç¿ëÇÒ¶§ ¶JAVA·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ JDBC µå¶óÀ̹ö¸¦ µ¿ÀûÀ¸·Î ·ÎµùÇÏ´Â °æ¿ì... ±× °æ¿ì ¿Ü¿¡´Â ±×´ÙÁö »ç¿ëµÇÁö ¾ÊÀºµí ÇÏ´Â ¸Þ¼ÒµåÀÏ °ÍÀÌ´Ù.
ÇÏÁö¸¸ µ¥ÀÌÅÍ º£À̽º ¾øÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °æ¿ìµµ ÈçÄ¡ ¾ÊÀ¸´Ï ÀÚÁÖ »ç¿ëµÈ´Ù°í º¼ ¼ö µµ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯¸é ÀÌ·± Class.forNameÀ̶ó´Â Ŭ·¡½º°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¿¡ ´ëÇØ¼ °£´ÜÈ÷ ¾Ë¾Æº¸ÀÚ.
[edit]
3.1 GCJ·Î ÇÁ·Î±×·¡¹Ö ÇÒ¶§ Class.forName¸Þ¼Òµå ¶ÀÌÁ¦ ÀÌ ¸Þ¼Òµå¸¦ GCJ¿¡¼ ¾î¶»°Ô »ç¿ëÇÒ ¼ö ÀÖÀ»±î? À§¿¡¼ º¸´Ï µ¿ÀûÀ¸·Î ·ÎµùÇϴµ¥... GCJ´Â Çϳª·Î ¸µÅ©ÇÒ¶§ ¹¾î¼ »ç¿ëµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ» ¾Ë°Ô µÈ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ ¼öÇàÇØº¸±â ¹Ù¶õ´Ù.
public class ExamClassforName { public static void main(String[] args) { System.out.println("Class.forName Example"); try { Class ex = Class.forName("TextClass"); } catch(Exception e) { System.out.println("error = "+e.toString()); } } } ./¿Í core://¿¡¼ ã¾ÒÀ¸³ª ¾ø´Ù°í ³ª¿Â´Ù. ¹Ù·Î ±× À§Ä¡¿¡ Ŭ·¡½º°¡ Á¸ÀçÇØ¾ß ÇÑ´Ù. °á±¹ ÀÌ ¸Þ¼Òµå¸¦ ¾²¸é ´Ü¼øÈ÷ printlnÇÒ¶§º¸´Ù.. ³×ÀÌÆ¼ºê ÄÚµåÀÇ Å©±â°¡ 1MBÁ¤µµ Áõ°¡ÇѰÍÀ» º¼ ¼ö Àִµ¥... Ŭ·¡½º¸¦ ÇØ¼®ÇÒ.. ÇÊ¿äÇÑ°Ô ¹ÙÀεù µÈ °ÍÀÏ °ÍÀÌ´Ù. ±× ¾Æ·¡ ÄÄÆÄÀÏµÈ Å¬·¡½º°¡ ÀÖ´Ù¸é... ±×·±µ¥ ±× ÄÄÆÄÀÏµÈ Å¬·¡½º´Â ¹ÙÀÌÆ®ÄÚµå·Î ÄÄÆÄÀÏ µÇ¾î¾ß ÇÑ´Ù. ¾Æ¹«Æ° ÀÖ´Ù¸é ±×°ÍÀ» Àоîµé¿©¼ »ç¿ëÇÏ°Ô µÈ´Ù.
[edit]
3.2 °£´ÜÇÑ ¿¹¸¦ ÅëÇØ ¾Ë¾Æº¸±â ¶ÀÌÁ¦ ¿¹¸¦ ÅëÇØ Á¶±Ý ´õ ¾Ë¾Æº¸µµ·Ï ÇÏÀÚ. ¾Æ·¡¿Í °°ÀÌ ÇѰ³ÀÇ ÀÎÅÍÆäÀ̽º¿Í ±×°ÍÀ» ±¸ÇöÇÑ Å¬·¡½º ±×¸®°í »ç¿ëÇÒ Å¬·¡½º¸¦ ÁغñÇÑ´Ù.
public interface forNameExamInterface { void test(); } public class forNameExam implements forNameExamInterface { forNameExam() { System.out.println("forNameExample - initial"); } public void test() { System.out.println("forNameExample - test"); } } public class ExamClassforName { public static void main(String[] args) { System.out.println("Class.forName Example"); try { Class ex = Class.forName("forNameExam"); forNameExamInterface obj = (forNameExamInterface)ex.newInstance(); obj.test(); } catch(Exception e) { System.out.println("error = "+e.toString()); } } } OBJS = forNameExamInterface.o \ ExamClassforName.o CLASSES = forNameExam.class MAINCLASS = ExamClassforName all: $(CLASSES) $(OBJS) gcj --main=$(MAINCLASS) $(OBJS) -o $(MAINCLASS) forNameExamInterface.o : forNameExamInterface.java gcj -c forNameExamInterface.java -o forNameExamInterface.o ExamClassforName.o : ExamClassforName.java gcj -c ExamClassforName.java -o ExamClassforName.o forNameExam.class : forNameExam.java gcj -C forNameExam.java [edit]
4 GCJ¿¡¼ GUI Çϱ⠶GCJ´Â ÀÚ¹Ù API 1.2¿¡ ±âÁØÀ» µÐ API¸¦ Á¦°øÇÑ´Ù. ÇÏÁö¸¸ GCJ °ø½Ä ȨÆäÀÌÁö¿¡¼ ¹àÈ÷°í ÀÖµíÀÌ ¸î¸î ÆÐŰÁö°¡ ºüÁ® ÀÖÀ¸¸ç ´ëÇ¥ÀûÀÎ °ÍÀÌ AWTÀÌ´Ù. µû¶ó¼ GCJ·Î ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» ÇÏ·Á¸é GUI¿¡ ÀÖ¾î¼ ¹®Á¦¸¦ °Þ°Ô µÉ ¼ö ÀÖ´Ù. ¹°·Ð GCJ User GroupÀÇ LINK¿¡ ¸µÅ©ÇصξúµíÀÌ XAWT°°Àº °Íµµ ÀÖ´Ù.
±×·¯ÇÑ ´ë¾ÈÀ¸·Î Eclipse¸¦ Á¦ÀÛÇϱâ À§ÇØ Eclipse ProjectÀÇ ÀϺηΠ°³¹ßµÈ SWT¸¦ GCJ·Î ºôµåÇØ¼ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ½ÇÁ¦ ±×·¸°Ô Çϰí ÀÖ´Â »ç¶÷µéÀÌ ÀÖÀ¸¸ç ±×Á¡¿¡ ´ëÇØ¼´Â GCJ User GroupÀÇ Projects¿¡¼ "JFace & SWT Native Library Build"¸¦ Âü°íÇϽñ⠹ٶõ´Ù. Àá½Ã ¾ð±ÞÀ» ÇÏÀÚ¸é ÇöÀç ÀÌ ±ÛÀ» ¾²°í ÀÖ´Â ½ÃÁ¡¿¡ 2.1À» ºôµåÇÑ °á°ú¹°Àº Ÿ »çÀÌÆ®¿¡¼ º£Æ÷ÁßÀ̸ç.. GCJ User GroupÀÇ Project¿¡¼´Â 3.0M6À» ºôµåÇßÀ¸¸ç ÀÌ´Â ¾ÆÁ÷ º£Æ÷ÇÏÁö ¾Ê°í ÀÖ´Ù. °èÁ¤ ¿ë·® °ü°è·Î ¸¶¶¥È÷ º£Æ÷ÇÒ ¸¸ÇÑ Àå¼Ò°¡ ¾ø¾î¼ÀÌ´Ù.
RefactorMe
JavaGnomeÀ» ÀÌ¿ëÇϸé GTK/GNOMEÀ» GUI·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. GNOME 2.6ºÎÅÍ´Â GnomePlatformBindingÀ̶ó´Â ÇüÅ·Π´Ù¸¥ ¾ð¾î·Î GNOME¾îÇø®ÄÉÀ̼ÇÀ» °³¹ßÇϱâ À§ÇÑ ¶óÀ̺긮·¯¸¦ ¹èÆ÷Çϴµ¥, C++, Perl°ú ÇÔ²² Java°¡ ±âº»À¸·Î Æ÷ÇԵǾî ÀÖ´Ù. --iolo
[edit]
4.1 SWT¸¦ ºôµåÇϱ⠶SWT3.0M6À» ±âÁØÀ¸·Î ¼³¸íÇϰڴÙ. ÀÏ´Ü ¼Ò½º¸¦ ¹Þ¾Æ¼ µð·ºÅ丮¿¡ ¸ðµÎ Ç®¸é ´ë·« ÀÌ·± µð·ºÅ丮°¡ ³ª¿Â´Ù.
org/eclipse/swt/...
¹Ù·Î ÆÐŰÁö°¡ ±×·¸°Ô µÇ±â ¶§¹®ÀÌ´Ù. ¾Æ¹«Æ° ÀÌ°É ¿°µÎÇØµÎ°í ºôµåÇÏ¸é µÈ´Ù. ÆÐŰÁö¸¦ ºôµåÇÏ´Â °ÍÀº JAVAÀÇ Package¸¦ ¶óÀ̺귯¸®·Î ¹¾î »ç¿ëÇϱ⸦ Âü°íÇϱ⠹ٶõ´Ù. ¶ÇÇÑ JNI¿¡ ´ëÇÑ ³»¿ëµµ Âü°íÇϱ⠹ٶõ´Ù. SWT¶óÀ̺귯¸®´Â JNI¸¦ »ç¿ëÇϰí Àֱ⠶§¹®ÀÌ´Ù.
ÇÏÁö¸¸ ±×³É ºôµåÇÏ¸é ¸î°¡Áö ¿¡·¯¸¦ ¸¸³ª°Ô µÈ´Ù. ±×·± ¿¡·¯¸¦ ÇØ°áÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ °£´ÜÈ÷ À̾߱âÇÏ°í ³Ñ¾î°¡°Ú´Ù. ´ÙÀ½ ÆÐŰÁöÀÇ Å¬·¡½º¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
org.eclipse.swt.custom.TableCursor
void traverse... ¡æboolean traverse...
org.eclipse.swt.custom.StyledText
javac -classpath .\src src/org/eclipse/swt/custom/StyledText.java
[edit]
4.2 SWT¸¦ »ç¿ëÇÑ °£´ÜÇÑ ¿¹Á¦ ¶ÀÌÁ¦ ºôµå¸¦ Çß´Ù¸é ¾Æ¸¶ µÎ°¡ÁöÀÇ °á°ú¹°ÀÌ ÀÖ°Ô µÉ °ÍÀÌ´Ù.
libswt.a
swt.jar
±×¸®°í ´ÙÀ½ ¿¹Á¦¸¦ ÁغñÇÑ´Ù.
import org.eclipse.swt.widgets.*; public class ExamSWT { public static void main(String[] args) { Display display = new Display(); Shell shell = new Shell(display); shell.open (); while (!shell.isDisposed ()) { if (!display.readAndDispatch ()) display.sleep (); } display.dispose (); } } swt-awt-win32-3034.dll
swt-win32-3034.dll
À§ µÎÆÄÀÏÀº ¼Ò½º¸¦ ¹Þ¾Æ¼ Á÷Á¢ ºôµå¸¦ ÇÒ ¼öµµ ÀÖÀ¸¸ç ºôµåµÈ °ÍÀ» ´Ù¿î¹ÞÀ» ¼öµµ ÀÖ´Ù.
[edit]
5 GCJ¿¡¼ Java Native Interface»ç¿ëÇϱ⠶ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ ÀÚ¹Ù ³»¿¡¼ ÇØ°áÀÌ ¾î·Æ°Å³ª ºü¸¥ 󸮸¦ À§Çؼ JNI¶ó´Â Java Native Interface¸¦ »ç¿ëÇÑ´Ù. GCJ¿¡¼µµ ÀÌ¿Í ºñ½ÁÇÑ ÇüÅ·ΠÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ´ÙÀ½ URL¿¡ ÀÖ´Â ¿¹Á¦¸¦ ÇÔ²² »ìÆìº¸¸é¼ GCJ¿¡¼ ¾î¶»°Ô JNI¸¦ »ç¿ëÇÏ´ÂÁö »ìÆìº¸ÀÚ.
http://gcc.gnu.org/java/jni-comp.txt
[edit]
5.1 JNI¸¦ À§ÇÑ ±âÃÊ ¶GCJ¿¡¼´Â Sun»çÀÇ Java¿¡¼Ã³·³ JNI¸¦ Á¦°øÇÑ´Ù. À̸¦ ÅëÇØ¼ GCJ¿¡ ÆÐŰÁö·Î Á¦°øµÇÁö ¾Ê´Â´Ù ÇÏ´õ¶óµµ ¹«¾ùÀ̵çÁö ÇϰíÀÚ ÇÏ´Â °ÍÀ» ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÇÏÁö¸¸ JNI¿Ü¿¡µµ CNI¸¦ Á¦°øÇÑ´Ù. ¾ÆÁ÷ CNI¿¡ ´ëÇØ¼ ÇÊÀÚ´Â Á¦´ë·Î ¾Æ´Â ¹Ù´Â ¾øÁö¸¸ ¾î·ÅDzÇÑ ´À³¦¿¡ ÀÇÁ¸ÇØ À̾߱âÇÏÀÚ¸é µ¿Àû ¸µÅ© ¸ðµâÀÇ Çʿ伺 ¿©ºÎÀÌ´Ù. JNI¸¦ »ç¿ëÇÑ °æ¿ì¿¡´Â ¸®´ª½º¿Í °°Àº °æ¿ì¿¡´Â .so¶ó´Â ¸ðµâÀÌ À©µµ¿ìÁî°°Àº °æ¿ì¿¡´Â .dllÀ̶ó´Â ¸ðµâÀÌ ÇÊ¿äÇÏ°Ô µÈ´Ù. ¹Ý¸é¿¡ CNI´Â ±×°ÍÀÌ ÇÊ¿ä ¾ø´Â µí ÇÏ´Ù. ÀÌ Á¡ÀÌ À߸øµÈ ³»¿ëÀ̶ó¸é Á¤Á¤ÇØÁֱ⠹ٶõ´Ù.
ÀÏ´Ü ÀÌ·± µÎ°¡Áö ¹æ¹ýÀ» Á¦°øÇϱ⠶§¹®¿¡ GCJ¿¡¼´Â ±âº»ÀûÀ¸·Î CNI¸¦ »ç¿ëÇÑ´Ù´Â °¡Á¤À» Çϰí ÀÚ¹Ù ¼Ò½º Äڵ带 ÄÄÆÄÀÏÇÑ´Ù. ±×·¸±â ¶§¹®¿¡ JNI¸¦ »ç¿ëÇÏ´Â °æ¿ì ±×³É ÄÄÆÄÀÏÀ» ÇÏ¸é ¿¡·¯¸¦ ¹ß»ýÇÑ´Ù. µû¶ó¼ º°µµÀÇ ¿É¼ÇÀÌ ÇÊ¿äÇÏ´Ù. ¹Ù·Î -fjniÀÌ´Ù. À̰ÍÀº jni¸¦ »ç¿ëÇÏ´Â swt¸¦ ºôµåÇÒ¶§µµ »ç¿ëµÇ¾ú´Ù. JNI¸¦ »ç¿ëÇÏ·Á´Â ÀÚ¹Ù ¼Ò½º Äڵ尡 ÀÖ´Ù¸é ´ÙÀ½Ã³·³ ÄÄÆÄÀÏÇÑ´Ù.
gcj -fjni -o sample sample.java
gcjh -jni sample
±×¸®°í sample.h¿¡ ¸Â°Ô ±¸ÇöÀ» ÇÏ¿´´Ù¸é ±×°ÍÀ» µ¿Àû ¸µÅ© ¸ðµâ·Î ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ¹æ¹ýÀº gcc·Î ÇÁ·Î±×·¡¹Ö ÇÒ¶§¿Í °°´Ù.
gcc -c sampNat.c gcc -shared -o sampNat.dll sampNat.o [edit]
5.2 °£´ÜÇÑ ¿¹Á¦ ¶°£´ÜÇÑ ¿¹Á¦¸¦ º¸ÀÚ. À§ÀÇ URL¿¡¼ ±×´ë·Î º¹»çÇØ¼ À©µµ¿ìÁîÀÇ Mingw¿¡¼ »ç¿ë °¡´ÉÇϵµ·Ï ¾à°£ ¼öÁ¤À» Çß´Ù. °ÅÀÇ °°´Ù°í º¸¾Æµµ ¹«¹æÇÏ´Ù.
sample.java
public class sample { public native void myNative(String s); public void myJava(String s) { s = s + ", Java"; System.out.println(s); } public static void main(String args[]) { sample x = new sample(); x.myJava("Hello"); x.myNative("Hello, Java (from C)"); x.myJava("Goodbye"); } static { System.loadLibrary("sampNat"); } } sampNat.c
#include <jni.h> #include "sample.h" #include <stdio.h> JNIEXPORT void JNICALL Java_sample_myNative (JNIEnv *env, jobject this, jstring s) { jclass cls; jfieldID fid; jobject obj; jmethodID mid; printf("From C\n"); cls = (*env)->FindClass(env, "java/lang/System"); if (cls == 0) { printf("java/lang/System lookup failed\n"); return; } fid = (*env)->GetStaticFieldID(env, cls, "out", "Ljava/io/PrintStream;"); if (fid == 0) { printf("java/lang/System::out lookup failed\n"); return; } obj = (*env)->GetStaticObjectField(env, cls, fid); if (obj == 0) { printf("GetStaticObjectField call failed\n"); return; } cls = (*env)->GetObjectClass(env, obj); if (cls == 0) { printf("GetObjectClass(out) failed\n"); return; } mid = (*env)->GetMethodID(env, cls, "println", "(Ljava/lang/String;)V"); if (mid == 0) { printf("println method lookup failed\n"); return; } (*env)->CallVoidMethod(env, obj, mid, s); } ÀÌ·¸°Ô Çß´Ù¸é ºôµåÇÏ´Â ÀÏÀÌ ³²¾Ò´Ù. À§ÀÇ URL¿¡¼´Â MakefileÀ» ÀÌ¿ëÇϰí ÀÖ´Ù. ÇÊÀÚ´Â ±×³É ºôµå¿¡ ÇÊ¿äÇÑ ¼ø¼´ë·Î ³ª¿Çغ¸µµ·Ï ÇϰڴÙ.
gcj -C sample.java gcjh -jni sample gcc -c sampNat.c -o sampNat.o gcc -shared -o sampNat.dll sampNat.o gcj -fjni -o sample sample.class --main=sample ±×¸®°í »ý¼ºµÈ sampleÀ» ½ÇÇà½ÃÄѺ¸¶ó. ¸ÚÁö°Ô ½ÇÇàµÉ °ÍÀÌ´Ù.
[edit]
6 ÃÖÀûÈ·Î ¼º´É Çâ»ó½Ã۱⠶GCCÀÇ ÃÖÀûÈ ¿É¼ÇµéÀ» GCJ¿¡¼µµ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
# gcj -Os -s -march=pentium2 --main=Hello Hello.o
[edit]
7 ½ÇÇà ÆÄÀÏ Å©±â ÁÙÀ̱⠶GCJ·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇßÀ» ¶§ÀÇ °ñÄ©°Å¸® Áß Çϳª´Â, ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀÇ Ä¿´Ù¶õ Å©±âÀÌ´Ù. ÇÊÀÚ´Â SWT¸¦ ÀÌ¿ëÇØ¼ Text À§Á¬¿¡ 'Hello World'¸¦ Ãâ·ÂÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾ú´Âµ¥, ±× Å©±â´Â Àڱ׸¶Ä¡ 48.2M³ª µÇ¾ú´Ù. À̰ÍÀº º¸ÅëÀÇ JRE ·Îµù¿¡ ÇÊ¿äÇÑ °¡ºñÁö Ä÷ºÅÍ¿Í ¼ö¹é°³ÀÇ Å¬·¡½º ÆÄÀÏÀ» ³»ÀåÇÔÀ¸·Î½á »ý±ä °á°ú·Î, ÀÛÀº ÇÁ·Î±×·¥¿¡°Ô´Â Áö³ªÄ¡°Ô ºñ´ëÇÑ ¿ë·®ÀÌ´Ù.
[edit]
7.1 srtipÀ» ÀÌ¿ëÇÑ ¹æ¹ý ¶stripÀº ¹ÙÀ̳ʸ®¿¡¼ ºÒÇÊ¿äÇÑ µð¹ö±ë ½Éº¼µéÀ» Á¦°ÅÇØÁØ´Ù. À©µµ¿ì À¯Àú¶ó¸é mingw/binutils°¡ ÇÊ¿äÇѵ¥, ÇÊÀÚ´Â
javacompiler ÆÐŰÁö¿¡ ³»ÀåµÈ °ÍÀ» »ç¿ëÇß´Ù.
»ç¿ë¹ýÀº ¸Å¿ì °£´ÜÇÏ´Ù.
# strip Foo.exe
[edit]
7.2 gcjÀÇ ¿É¼ÇÀ» ÀÌ¿ëÇÑ ¹æ¹ý ¶gcj·Î ÄÄÆÄÀϽà -s ¿É¼ÇÀ» ÁÖ¸é ½Éº¼µéÀÌ Á¦°ÅµÇ°í ¿ë·®ÀÌ ÁÙ¾îµç´Ù.
# gcj -s --main=bar.Foo *.o Foo
# gcj -s Bar.java //-s È¿°ú¾øÀ½ # gcj -s --main=Foo *.o Foo # strip Bar.o # gcj -s --main=Foo *.o Foo //Bar.o ¾ÈÀÇ ÆÐŰÁö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿¡·¯ [edit]
7.3 ¶óÀ̺귯¸® »ç¿ëÇϱ⠶¿ÀºêÁ§Æ® ÄÚµå(*.o) ´ë½Å ¶óÀ̺귯¸®(*.a)¸¦ »ç¿ëÇÏ¸é »ç¿ëµÇÁö ¾Ê´Â Ŭ·¡½º´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
¾ð±ÞÇÑ HelloWorld ÄÄÆÄÀϽà ¿ë·® Â÷ÀÌ´Â 1MB ¹Ì¸¸À¸·Î ¸Å¿ì ¹Ì¹ÌÇßÁö¸¸, ±Ô¸ð°¡ Ä¿Áú ¼ö·Ï µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
Ŭ·¡½º·Î´õ µî ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇÏ´Â °æ¿ì´Â gcj°¡ ¸ðµç Ŭ·¡½ºÀÇ »ç¿ëÀ» °¨ÁöÇÏÁö ¸øÇØ ½ÇÇàÁß ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î, ÁÖÀDZí°Ô »ç¿ëÇϵµ·Ï ÇÑ´Ù.
[edit]
7.4 libgcj.dll ¸¸µé±â ¶gcj¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥À» ¿©·µ ¸¸µå´Â °æ¿ì, libgcj¸¦ º°µµ·Î ¸ðµâÈÇÏ¿© ¿ë·®À» Å©°Ô ÁÙÀÏ ¼ö ÀÖ´Ù.
´ÙÀ½ ¹®¼µéÀ» Âü°íÇ϶ó.
°¡´ÉÇÏ´Ù¸é java.awt.*, javax.swing.* µîÀÇ ÆÐŰÁö¸¦ Á¦°ÅÇÏ´Â °Íµµ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
[edit]
7.5 UPX¸¦ ÀÌ¿ëÇÑ ¹æ¹ý ¶ UPX¸¦ »ç¿ëÇÏ´Â °Íµµ ÇϳªÀÇ ¹æ¹ýÀÌ´Ù. ¾ÐÃà ¼Óµµ°¡ ¸Å¿ì ºü¸£¸ç ½ÇÇà ¼Óµµ¿¡µµ °ÅÀÇ ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÁö¸¸, ´ë½Å ¸Þ¸ð¸® Á¡À¯À²ÀÌ ¾ÐÃàÀü ÆÄÀÏÀÇ ¿ë·®¸¸Å ´Ã¾î³´Ù.
»ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
# upx -1 -o CompressedFoo.exe FatFoo.exe
´ÙÀ½Àº ¾Õ¼ ¾ð±ÞÇÑ ÇÁ·Î±×·¥À» UPX¸¦ »ç¿ëÇØ ¾ÐÃàÇÑ °á°úÀÌ´Ù. ºñ±³Àû Àú»ç¾çÀÎ ¼¿400MHz¿¡ 256M ·¥, ÄöÅÒ ÆÄÀ̾ 6G HDD¸¦ »ç¿ëÇß´Ù.
°¡Àå ºü¸¥ ¾ÐÃà¿¡¼Á¶Â÷ ½ÇÇà ÆÄÀÏÀÇ Å©±â°¡ Àý¹Ý ÀÌÇÏ·Î ÁÙ¾îµç °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. [edit]
8 GCJ Bug & Patch ¶
¹®¼ ÀÏÁö
See Also
from wiki.kldp.org by me
|
A gift of flower will soon be made to you. |









![[http]](/imgs/http.png)