GCJ
1.1. »ç¿ëȯ°æ ¶GCJ´Â gccÀÇ ÀϺÎÀ̱⠶§¹®¿¡ gcc¸¦ »ç¿ëÇÒ ¼ö Àִ ȯ°æÀÌ µÇ¾î¾ß ÇÑ´Ù.
±âº»ÀûÀ¸·Î ¸®´ª½º¿¡¼´Â »ç¿ëÀÌ °¡´ÉÇϸç À©µµ¿ìÁî¿¡¼ http://www.mingw.org ¿¡¼ Á¦°øÇÏ´Â °ÍÀ» ÀÌ¿ëÇÒ ¼ö ÀÖ´Ù.
1.2. °£´ÜÇÑ ¿¹Á¦ ¶
public class ExamGCJ {
public static void main(String[] args) { System.out.println("ExamGCJ Class GCJ Test"); } } À§¿Í °°Àº ¿¹Á¦¸¦ °¡Áö°í Çغ¸ÀÚ.
¸ÕÀú À§¿Í °°Àº ÆÄÀÏÀ» Çϳª ÀÛ¼ºÇÏ°í ÆÄÀÏ À̸§À» ExamGCJ.java·Î Çؼ ÀúÀåÇÑ´Ù.
±×¸®°í ´ÙÀ½°ú °°Àº ¸í·ÉÁÙÀ» ÅëÇؼ GCJ·Î ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖ´Ù.
# gcj --main=ExamGCJ ExamGCJ.java -o ExamGCJ
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 1.4. ¹ÙÀÌÆ®ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏ ¶ÄÄÆÄÀÏ ÇÒ ¶§ .java ´ë½Å .class ÆÄÀÏÀ» ³Ö¾îÁÖ¸é ÄÄÆÄÀÏµÈ ¹ÙÀÌÆ® ÄÚµå·ÎºÎÅÍ ÄÄÆÄÀÏÀÌ °¡´ÉÇÏ´Ù.
# gcj -c LibExamGCJ.class
ForeachExam.java:16: error: Invalid declaration.
for(File f : fileList){ ^ 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 2. ÆÐÅ°Áö¸¦ ¶óÀ̺귯¸®È Çϱ⠶GCJ´Â ÁÖ·Î Native Code¸¦ »ý¼ºÇϱâ À§ÇØ »ç¿ëÇÏ´Â ÄÄÆÄÀÏ·¯À̱⠶§¹®¿¡ ÀÚ¹Ù·Î ÀÌ·ç¾îÁø ÆÐÅ°Áö¸¦ ¶óÀ̺귯¸®ÈÇÏ¿© ¸µÅ©ÇÏ´Â °ÍÀÌ ¿øÇÒÇÑ °³¹ßÀ» À§ÇØ ¹Ù¶÷Á÷ÇÏ´Ù. ƯÈ÷ ¸µÅ©ÇÒ¶§ ¿ÀºêÁ§Æ®ÄÚµå(.o)´Â »ç¿ëÇÏÁö ¾Ê¾Æµµ °°ÀÌ ¹Áö¸¸ Á¤Àû¸µÅ©¶óÀ̺귯¸®(.a)´Â ÇÊ¿äÇÑ °Í¸¸ ¹¾îÁö¹Ç·Î ¶óÀ̺귯¸®È Çؼ »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ±×·¯¸é ±× ¹æ¹ýÀ» ÇϳªÀÇ ¿¹Á¦¿Í ÇÔ²² °£´ÜÈ÷ ¼Ò°³ÇÏ°íÀÚ ÇÑ´Ù.
2.1. ÆÐÅ°Áö ¾ÈÀÇ ¿ÀºêÁ§Æ®ÄÚµåÀÇ À̸§Àº ¾î¶»°Ô Á¤ÇØÁö´Â°¡? ¶ÆÐÅ°ÁöÀÇ ±¸¼ºÀ» º¸¸é º¸Åë ÀÌ·± ÇüÅ·ΠµÇ¾î ÀÖÀ» °ÍÀÌ´Ù.
java.util.Vector
À§¿¡ º¸¸é ¾Ë ¼ö ÀÖµíÀÌ java.util ÆÐÅ°ÁöÀÇ VectorŬ·¡½ºÀÌ´Ù. ±×¸®°í ¼Ò½º ÄÚµå ³»¿¡¼ »ç¿ëÇÏ·Á¸é ´ÙÀ½Ã³·³ import¸¦ ÇÑ´Ù.
import java.util.Vector
¹°·Ð GCJ·Î ÄÄÆÄÀÏ ÇÒ ¼Ò½ºµµ ¶È°°ÀÌ ÇÑ´Ù. ±×·³ ÀÌ°ÍÀ» »ç¿ëÇÑ Äڵ带 ¸µÅ©ÇÒ¶§´Â ¾î¶² À̸§À» °¡Áø ¿ÀÇÁÁ§Æ®°¡ ÇÊ¿äÇÑ°¡?
¹Ù·Î ´ÙÀ½°ú °°Àº À̸§À» °¡Áø ¿ÀºêÁ§Æ® Äڵ尡 ÇÊ¿äÇÏ°Ô µÈ´Ù. ¶óÀ̺귯¸® ¾È¿¡¼ À̾߱âÀÌ´Ù.
java_util_Vector.o
±×¸®°í ½ÇÁ¦·Î libgcj.a¾È¿¡ Á¸ÀçÇÑ´Ù. ¾Æ¹«Æ° ±×·¸°Ô ¶óÀ̺귯¸®¸¦ ¸¸µé¾îµÎ°í ÇÊ¿äÇÒ¶§¸¶´Ù... Áï ÇØ´ç ÆÐÅ°Áö¸¦ »ç¿ëÇÒ¶§¸¶´Ù ¿ÀÇÁÁ§Æ® Äڵ尡 ¾Æ´Ñ ¶óÀ̺귯¸®¸¦ ¸µÅ©Çؼ »ç¿ëÇÏ¸é µÈ´Ù.
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 µð·ºÅ丮 ¾Æ·¡ ¼Ò½º¸¸ Á÷Á¢ ÀÛ¼ºÀ» ÇÏ°í ³ª¸ÓÁö µð·ºÅ丮´Â... Make¸¦ ÇÏ¸é¼ °á°ú¹°ÀÌ ÇÊ¿ä¿¡ µû¶ó ÀúÀåµÉ µð·ºÅ丮ÀÌ´Ù. ±×¸®°í ./srcµð·ºÅ丮 ¾Æ·¡¿¡´Â...
./src/org/nahome/hangulee/
ÀÌ·± µð·ºÅ丮°¡ Á¸ÀçÇÑ´Ù. ±×¸®°í hanguleeµð·ºÅ丮 ¾Æ·¡ LibExamGCJ.java, LibExamGCJ2.java¶ó´Â ÆÄÀÏÀÌ Á¸ÀçÇÑ´Ù. ±×¸®°í °¢ ÆÄÀÏÀÇ ¼Ò½º ÄÚµå´Â °£´ÜÇÑ ¿¹Á¦¿¡ ¸Â°Ô »ý¼ºÀÚ¸¸ Á¸ÀçÇÑ´Ù. ´ÙÀ½°ú °°´Ù.
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"); } } ´ÙÀ½Àº ½ÇÁ¦ ¿ì¸®°¡ ¿¹¿¡¼ »ç¿ëÇÒ MakefileÀÌ´Ù. MakefileÀº »óÀ§.. ±×·¯´Ï±î ./src µð·ºÅ丮°¡ ÀÖ´Â µð·ºÅ丮¿¡ Á¸ÀçÇØ¾ß ÇÑ´Ù.
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 ÀÌ·¸°Ô Áغñ°¡ µÇ¾ú´Ù¸é makeÇغ¸½Ã±â ¹Ù¶õ´Ù. makeÇÏ¸é ¾Æ½Ã°ÚÁö¸¸ ./obj ¾Æ·¡¿¡ ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ±×¸®°í ./lib ¾Æ·¡¿¡ libexam.a°¡ »ý¼ºµÇ°í »óÀ§¿¡ exam.jarÀÌ »ý¼ºµÉ °ÍÀÌ´Ù. exam.jarÀº ÀÌ ÆÐÅ°Áö¸¦ »ç¿ëÇÒ ¼Ò½º Äڵ带 ÄÄÆÄÀÏ ÇÒ¶§ Ŭ·¡½º Æнº¿¡ ÁöÁ¤Çϱâ À§ÇØ ÇÊ¿äÇÏ´Ù.
ÀÚ!.. ÀÌÁ¦ °£´ÜÇÑ ¶óÀ̺귯¸®°¡ ÁغñµÇ¾ú´Ù.
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 ÀÌ·¸°Ô Çϸé ExamGCJ¶ó´Â Native Code°¡ ´ã±ä ÆÄÀÏÀÌ »ý¼ºµÈ´Ù. ÀÌ°ÍÀ» ½ÇÇàÇÏ¸é °á°ú´Â...
Two Class GCJ Test
Two Class GCJ Test --- this is print in lib Two Class GCJ Test --- this is print in lib2 ÀÌ·¸°Ô ³ª¿Ã°ÍÀÌ´Ù.... ÀÌÁ¦ ÀÌÇØ°¡ µÇ´Â°¡? ¹°·Ð À§¿¡¼ Ŭ·¡½º Æнº¸¦ ÀÌ·¸°Ô ÁöÁ¤Çصµ µÈ´Ù.
(À§ ¿¹Á¦°¡ ÀÖ´Â µð·ºÅ丮 °æ·Î)/src
ÇÏÁö¸¸ ÀÌ·¸°Ô ÇÏ¸é ¶óÀ̺귯¸®¸¦ ¹èÆ÷ÇÒ¶§ ¾î·Á¿òÀÌ µû¸¦ °ÍÀÌ´Ù. ±×·¯´Ï jarÀ» »ý¼ºÇÏ´Â°Ô Æí¸®ÇÏ´Ù. ÀÚ!.. ÀÌÁ¦ ´õ ³ºÀº ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Â Áغñ°¡ µÇ¾ú´Â°¡? ¶Ç ´Ù¸¥ ÆÐÅ°Áö¸¦ ¶óÀ̺귯¸®·Î ¸¸µé¾îº¸°í ½ÍÁö ¾ÊÀº°¡?
3. Class.forName¸¦ »ç¿ëÇÒ¶§ ¶JAVA·Î ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ JDBC µå¶óÀ̹ö¸¦ µ¿ÀûÀ¸·Î ·ÎµùÇÏ´Â °æ¿ì... ±× °æ¿ì ¿Ü¿¡´Â ±×´ÙÁö »ç¿ëµÇÁö ¾ÊÀºµí ÇÏ´Â ¸Þ¼ÒµåÀÏ °ÍÀÌ´Ù.
ÇÏÁö¸¸ µ¥ÀÌÅÍ º£À̽º ¾øÀÌ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °æ¿ìµµ ÈçÄ¡ ¾ÊÀ¸´Ï ÀÚÁÖ »ç¿ëµÈ´Ù°í º¼ ¼ö µµ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯¸é ÀÌ·± Class.forNameÀ̶ó´Â Ŭ·¡½º°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö¿¡ ´ëÇؼ °£´ÜÈ÷ ¾Ë¾Æº¸ÀÚ.
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()); } } } Äڵ带 º¸´Ï TestClass¶ó´Â À̸§ÀÇ Å¬·¡½º°¡ ÇÊ¿äÇÏ´Ù. ¾Ë¾Æ¼ Çϳª ¸¸µéµçÁö... ±×³É Çغ¸µçÁö ¾î¶»°Ôµç Çغ¸±â ¹Ù¶õ´Ù. µÎ°¡Áö ´Ù Çؼ ºñ±³Çغ¸´Â °Íµµ ÁÁ´Ù. ¾î¶² °á°ú°¡ ³ª¿À´Â°¡? ¾Æ¸¶µµ ±×³É ÇßÀ»¶§ ´õ ÁÁÀº ¼ÒµæÀ» ¾ò¾úÀ» °ÍÀÌ´Ù. ¾Ë¾Æ¼ Çϳª ¸¸µé¾úÀ» °æ¿ì¿¡´Â ±×³É ¹«¸®¾øÀÌ ½ÇÇàµÇ°í Á¾·áµÈ´Ù. ÇÏÁö¸¸ ¾øÀ»¶© ¿¹¿Ü°¡ ¹ß»ýÇÑ´Ù. ±× Ŭ·¡½º°¡ ¾ø´Ù°í... ¾îµð¿¡ ¾ø´Ù°í ³ª¿À´ÂÁö À¯ÀÇÇؼ ºÃ´Â°¡?
./¿Í core://¿¡¼ ã¾ÒÀ¸³ª ¾ø´Ù°í ³ª¿Â´Ù. ¹Ù·Î ±× À§Ä¡¿¡ Ŭ·¡½º°¡ Á¸ÀçÇØ¾ß ÇÑ´Ù. °á±¹ ÀÌ ¸Þ¼Òµå¸¦ ¾²¸é ´Ü¼øÈ÷ printlnÇÒ¶§º¸´Ù.. ³×ÀÌƼºê ÄÚµåÀÇ Å©±â°¡ 1MBÁ¤µµ Áõ°¡ÇÑ°ÍÀ» º¼ ¼ö Àִµ¥... Ŭ·¡½º¸¦ Çؼ®ÇÒ.. ÇÊ¿äÇÑ°Ô ¹ÙÀεù µÈ °ÍÀÏ °ÍÀÌ´Ù. ±× ¾Æ·¡ ÄÄÆÄÀÏµÈ Å¬·¡½º°¡ ÀÖ´Ù¸é... ±×·±µ¥ ±× ÄÄÆÄÀÏµÈ Å¬·¡½º´Â ¹ÙÀÌÆ®ÄÚµå·Î ÄÄÆÄÀÏ µÇ¾î¾ß ÇÑ´Ù. ¾Æ¹«Æ° ÀÖ´Ù¸é ±×°ÍÀ» Àоîµé¿©¼ »ç¿ëÇÏ°Ô µÈ´Ù.
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()); } } } ±×¸®°í MakefileÀº ´ÙÀ½°ú °°´Ù.
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 ÀÚ! makeÇغ¸½Ã±â ¹Ù¶õ´Ù. Çغ¸¸é ¿ÀÇÁÁ§Æ® Äڵ尡 ´ã±ä ÆÄÀÏ µÎ°³, ³×ÀÌƼºê Äڵ尡 ´ã±ä ÆÄÀÏ Çϳª ±×¸®°í ¹ÙÀÌÆ® Äڵ尡 ´ã±ä ÆÄÀÏ Çϳª°¡ »ý¼ºµÈ´Ù. ½ÇÇàÇغ¸¸é ... ½ÇÇàÀÌ µÉ °ÍÀÌ´Ù... ÀÌ·± ¹æ¹ýÀ¸·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð À§Ã³·³ ÇÏÁö ¾Ê°í ¹ÙÀÌÆ® ÄÚµå·Î »ý¼ºµÈ forNameExam¸¦ ¿ÀºêÁ§Æ® ÄÚµå·Î »ý¼ºÇؼ.. ÇϳªÀÇ ½ÇÇàÆÄÀÏ¿¡ ¸µÅ©ÇÒ¶§ °°ÀÌ ¹À» ¼öµµ ÀÖ´Ù.
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
4.1. SWT¸¦ ºôµåÇϱ⠶SWT3.0M6À» ±âÁØÀ¸·Î ¼³¸íÇÏ°Ú´Ù. ÀÏ´Ü ¼Ò½º¸¦ ¹Þ¾Æ¼ µð·ºÅ丮¿¡ ¸ðµÎ Ç®¸é ´ë·« ÀÌ·± µð·ºÅ丮°¡ ³ª¿Â´Ù.
org/eclipse/swt/...
¹Ù·Î ÆÐÅ°Áö°¡ ±×·¸°Ô µÇ±â ¶§¹®ÀÌ´Ù. ¾Æ¹«Æ° ÀÌ°É ¿°µÎÇØµÎ°í ºôµåÇÏ¸é µÈ´Ù. ÆÐÅ°Áö¸¦ ºôµåÇÏ´Â °ÍÀº JAVAÀÇ Package¸¦ ¶óÀ̺귯¸®·Î ¹¾î »ç¿ëÇϱ⸦ Âü°íÇϱ⠹ٶõ´Ù. ¶ÇÇÑ JNI¿¡ ´ëÇÑ ³»¿ëµµ Âü°íÇϱ⠹ٶõ´Ù. SWT¶óÀ̺귯¸®´Â JNI¸¦ »ç¿ëÇÏ°í Àֱ⠶§¹®ÀÌ´Ù.
ÇÏÁö¸¸ ±×³É ºôµåÇÏ¸é ¸î°¡Áö ¿¡·¯¸¦ ¸¸³ª°Ô µÈ´Ù. ±×·± ¿¡·¯¸¦ ÇØ°áÇÏ´Â ¹æ¹ý¿¡ ´ëÇؼ °£´ÜÈ÷ À̾߱âÇÏ°í ³Ñ¾î°¡°Ú´Ù. ´ÙÀ½ ÆÐÅ°ÁöÀÇ Å¬·¡½º¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
org.eclipse.swt.custom.TableCursor
¿©±â¼´Â »ó¼Ó¹ÞÀº Ŭ·¡½º¿Í ¸®ÅÏÇü¸¸ ´Ù¸£°Ô ¿À¹ö¶óÀ̵ù ÇÑ ¸Þ½îµåÀÎ traverse°¡ ÀÖ¾î¼ ³ª¿À´Â ¿¡·¯ÀÌ´Ù. »ç½Ç ÀÌ°Ç JavaÀÇ ¹®¹ý¿¡µµ ¸ÂÁö ¾ÊÀ¸¸ç ¿¡·¯°¡ ¹ß»ýÇØ¾ß ¸ÂÀ¸³ª javac·Î´Â ÄÄÆÄÀÏÀÌ µÈ´Ù. ¾Æ¹«Æ° ´ÙÀ½Ã³·³ ¹Ù²Ù¸é µÈ´Ù.
void traverse... ¡æboolean traverse...
¹°·Ð À§Ã³·³ ÇØÁá´Ù¸é ¸®ÅÏ°ªµµ Á¤ÇØÁà¾ß ÇÑ´Ù´Â °ÍÀº ¸ðµÎ ¾Ë °ÍÀÌ´Ù. ±×¸®°í ´ÙÀ½ Ŭ·¡½º¿¡¼ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
org.eclipse.swt.custom.StyledText
À§ Ŭ·¡½º°¡ ÀÌ¹Ì Á¤ÀǵǾî ÀÖ´Ù°í ³ª¿Â´Ù. ±×·¯¸é¼ ÀÌ¹Ì Á¤ÀÇµÈ À§Ä¡¸¦ ¾Ë·ÁÁִµ¥ StyledText¸¦ ¾Ë·ÁÁØ´Ù. ÀÌ°ÍÀº GCJÀÇ ¹ö±×ÀΰÍÀ¸·Î »ý°¢µÈ´Ù. ÇÏÁö¸¸ ´ÙÀ½Ã³·³ 1Â÷ÀûÀ¸·Î ¹ÙÀÌÆ® ÄÚµå·Î ÄÄÆÄÀÏ ÇÏ°í ÇÏ¸é µÈ´Ù.
javac -classpath .\src src/org/eclipse/swt/custom/StyledText.java
ÀÌ µÎ°¡Áö¸¸ ÇØ°áÇϸé SWT¶óÀ̺귯¸®¸¦ ºôµåÇÒ ¼ö ÀÖ°Ô µÈ´Ù.
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 (); } } ÄÄÆÄÀÏÀº ¾î¶»°Ô ÇØ¾ß Çϴ°¡? ´Ù¸¥ ±âº» ¹®¼µéÀ» ÀоîºÃ´Ù¸é ¾Ë °ÍÀÌ´Ù. Ȥ½Ã ¸ð¸£½Ã°ÚÀ¸¸é ¾Õ¿¡ Àû¾ú´ø ¹®¼¸¦ ´Ù½ÃÇѹø Âü°íÇϱ⠹ٶõ´Ù. ±×¸®°í ÄÄÆÄÀÏÀ» ÇÑ °á°ú¸¦ ½ÇÇàÇÏ·Á¸é ´ÙÀ½ÀÇ µÎ ÆÄÀÏÀÌ °°Àº µð·ºÅ丮 ¶Ç´Â Path¿¡ °É¸° µð·ºÅ丮¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
swt-awt-win32-3034.dll
swt-win32-3034.dll
À§ µÎÆÄÀÏÀº ¼Ò½º¸¦ ¹Þ¾Æ¼ Á÷Á¢ ºôµå¸¦ ÇÒ ¼öµµ ÀÖÀ¸¸ç ºôµåµÈ °ÍÀ» ´Ù¿î¹ÞÀ» ¼öµµ ÀÖ´Ù.
5. GCJ¿¡¼ Java Native Interface»ç¿ëÇϱ⠶ÀÚ¹Ù ÇÁ·Î±×·¡¹ÖÀ» ÇÒ¶§ ÀÚ¹Ù ³»¿¡¼ ÇØ°áÀÌ ¾î·Æ°Å³ª ºü¸¥ 󸮸¦ À§Çؼ JNI¶ó´Â Java Native Interface¸¦ »ç¿ëÇÑ´Ù. GCJ¿¡¼µµ ÀÌ¿Í ºñ½ÁÇÑ ÇüÅ·ΠÇÁ·Î±×·¥À» ÀÛ¼ºÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ´ÙÀ½ URL¿¡ ÀÖ´Â ¿¹Á¦¸¦ ÇÔ²² »ìÆ캸¸é¼ GCJ¿¡¼ ¾î¶»°Ô JNI¸¦ »ç¿ëÇÏ´ÂÁö »ìÆ캸ÀÚ.
http://gcc.gnu.org/java/jni-comp.txt
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
¶ÇÇÑ Çì´õ ÆÄÀÏÀ» »ý¼ºÇÏ´Â °ÍÀÌ Á¦°øµÈ´Ù. Sun»çÀÇ Java¿¡¼´Â javah¶ó´Â µµ±¸°¡ Á¦°øµÇ¾ú´Ù. GCJ¿¡¼´Â gcjh¶ó´Â µµ±¸°¡ Á¦°øµÈ´Ù. Äֿܼ¡¼ ´ÙÀ½Ã³·³ ¸í·ÉÀ» ³»·Á Çì´õ ÆÄÀÏÀ» »ý¼ºÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.
gcjh -jni sample
ÀÌ·¸°Ô Çϸé sample.h°¡ »ý¼ºµÈ´Ù. ±×·±µ¥ À̶§ »ý°¢Çغ¸¾Æ¾ß ÇÒ°ÍÀº gcjhÀÇ µµ¿ò¸»À» ½ÇÇàÇغ¸¸é ¾Ë ¼ö ÀÖ°ÚÁö¸¸ ÀÌ°ÍÀº .classÆÄÀϷκÎÅÍ Çì´õ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. µû¶ó¼ ÀÌ¹Ì À§¿Í°°Àº °æ¿ì sample.class°¡ Á¸ÀçÇÏ°í ÀÖ¾î¾ß ÇÑ´Ù.
±×¸®°í sample.h¿¡ ¸Â°Ô ±¸ÇöÀ» ÇÏ¿´´Ù¸é ±×°ÍÀ» µ¿Àû ¸µÅ© ¸ðµâ·Î ÄÄÆÄÀÏÇØ¾ß ÇÑ´Ù. ¹æ¹ýÀº gcc·Î ÇÁ·Î±×·¡¹Ö ÇÒ¶§¿Í °°´Ù.
gcc -c sampNat.c
gcc -shared -o sampNat.dll sampNat.o ¿©±â¿¡ .dll·Î µÇ¾î Àִ°ÍÀº ÇÊÀÚ°¡ µ¥½ºÅ©Å¾À¸·Î ¸®´ª½º°¡ ¾Æ´Ñ À©µµ¿ìÁ ¾²°í Àֱ⠶§¹®ÀÌ´Ù. ¹°·Ð À§ÀÇ URL·Î °¡¸é ¸®´ª½º¿ë ¿¹Á¦¸¦ ¸¸³¯ ¼ö ÀÖ´Ù. ¾Æ¹«Æ° ÀÌÂëµÇ¸é ¾Æ·¡ ¿¹Á¦°¡ ¸ðµÎ ÀÌÇØ°¡ µÉ °ÍÀÌ´Ù. ´Ù½ÃÇѹø ¾ð±ÞÇÏÁö¸¸ ÇÊÀÚ´Â À§ÀÇ URLÀÇ ¿¹Á¦¸¦ À©µµ¿ìÁî¿¡¼ »ç¿ëÇÒ¼ö ÀÖµµ·Ï ¾à°£ÀÇ ¼öÁ¤À» ÇÏ¿´´Ù.
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.java¸¦ ¹ÙÀÌÆ® ÄÚµå·Î ÄÄÆÄÀÏ ÇÏ´Â °ÍÀÌ´Ù. ´ÙÀ½ µÎ¹ø° ÁÙÀº ±× »ý¼ºµÈ ¹ÙÀÌÆ® ÄÚµå·ÎºÎÅÍ Çì´õÆÄÀÏÀ» ¾ò´Â´Ù. ¼¼¹ø°ÁÙÀº ±×°ÍÀ» ±¸ÇöÇÏ°í ÀÖ´Â sampNat.c¸¦ ¿ÀºêÁ§Æ® ÄÚµå·Î ÄÄÆÄÀÏÇÏ°í ÀÖ´Ù. ±×¸®°í ³×¹ø°ÁÙ¿¡¼ µ¿Àû ¸µÅ© ¸ðµâÀ» ¸¸µé°í ¸¶Áö¸·À¸·Î ¹ÙÀÌÆ® ÄÚµå·Î ÄÄÆÄÀÏµÈ Å¬·¡½º¸¦ ³×ÀÌƼºê ÄÚµå·Î ÄÄÆÄÀÏÇÑ´Ù.
±×¸®°í »ý¼ºµÈ sampleÀ» ½ÇÇà½ÃÄѺ¸¶ó. ¸ÚÁö°Ô ½ÇÇàµÉ °ÍÀÌ´Ù.
6. ÃÖÀûÈ·Î ¼º´É Çâ»ó½ÃÅ°±â ¶GCCÀÇ ÃÖÀûÈ ¿É¼ÇµéÀ» GCJ¿¡¼µµ ±×´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù.
# gcj -Os -s -march=pentium2 --main=Hello Hello.o
ÀÚ¼¼ÇÑ ³»¿ëÀº GccOptimizationOptionsÀ» Âü°íÇÒ °Í.
7. ½ÇÇà ÆÄÀÏ Å©±â ÁÙÀ̱⠶GCJ·Î ÇÁ·Î±×·¥À» ÀÛ¼ºÇßÀ» ¶§ÀÇ °ñÄ©°Å¸® Áß Çϳª´Â, ÃÖÁ¾ ½ÇÇà ÆÄÀÏÀÇ Ä¿´Ù¶õ Å©±âÀÌ´Ù. ÇÊÀÚ´Â SWT¸¦ ÀÌ¿ëÇؼ Text À§Á¬¿¡ 'Hello World'¸¦ Ãâ·ÂÇÏ´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾ú´Âµ¥, ±× Å©±â´Â Àڱ׸¶Ä¡ 48.2M³ª µÇ¾ú´Ù. ÀÌ°ÍÀº º¸ÅëÀÇ JRE ·Îµù¿¡ ÇÊ¿äÇÑ °¡ºñÁö Ä÷ºÅÍ¿Í ¼ö¹é°³ÀÇ Å¬·¡½º ÆÄÀÏÀ» ³»ÀåÇÔÀ¸·Î½á »ý±ä °á°ú·Î, ÀÛÀº ÇÁ·Î±×·¥¿¡°Ô´Â Áö³ªÄ¡°Ô ºñ´ëÇÑ ¿ë·®ÀÌ´Ù.
7.1. srtipÀ» ÀÌ¿ëÇÑ ¹æ¹ý ¶stripÀº ¹ÙÀ̳ʸ®¿¡¼ ºÒÇÊ¿äÇÑ µð¹ö±ë ½Éº¼µéÀ» Á¦°ÅÇØÁØ´Ù. À©µµ¿ì À¯Àú¶ó¸é mingw/binutils°¡ ÇÊ¿äÇѵ¥, ÇÊÀÚ´Â javacompiler ÆÐÅ°Áö¿¡ ³»ÀåµÈ °ÍÀ» »ç¿ëÇß´Ù.
»ç¿ë¹ýÀº ¸Å¿ì °£´ÜÇÏ´Ù.
# strip Foo.exe
À§¿¡¼ ¾ð±ÞÇÑ ¹ÙÀ̳ʸ®ÀÇ °æ¿ì, ±× Å©±â°¡ 14.7M Á¤µµ·Î ÁÙ¾îµé¾ú´Ù.
7.2. gcjÀÇ ¿É¼ÇÀ» ÀÌ¿ëÇÑ ¹æ¹ý ¶gcj·Î ÄÄÆÄÀϽà -s ¿É¼ÇÀ» ÁÖ¸é ½Éº¼µéÀÌ Á¦°ÅµÇ°í ¿ë·®ÀÌ ÁÙ¾îµç´Ù.
# gcj -s --main=bar.Foo *.o Foo
ÀÌ °æ¿ì ¿ë·®Àº À§¿¡¼ stripÀ» »ç¿ëÇßÀ» ¶§¿Í µ¿ÀÏÇÏ´Ù.
´Ü, óÀ½ ¿ÀºêÁ§Æ® Äڵ带 »ý¼º½Ã¿¡´Â -s ¿É¼ÇÀÌ ºÒÇÊ¿äÇÏ´Ù. Àû¿ëµÇÁöµµ ¾ÊÀ» »Ó´õ·¯, stripÀ» ½á¼ °Á¦·Î ¿ë·®À» ÁÙÀ̸é ÈÄ¿¡ gcj¿¡¼ »ç¿ë½Ã ÆÐÅ°Áö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿¡·¯°¡ ¹ß»ýÇÑ´Ù.
# gcj -s Bar.java //-s È¿°ú¾øÀ½
# gcj -s --main=Foo *.o Foo # strip Bar.o # gcj -s --main=Foo *.o Foo //Bar.o ¾ÈÀÇ ÆÐÅ°Áö¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿¡·¯ 7.3. ¶óÀ̺귯¸® »ç¿ëÇϱ⠶¿ÀºêÁ§Æ® ÄÚµå(*.o) ´ë½Å ¶óÀ̺귯¸®(*.a)¸¦ »ç¿ëÇÏ¸é »ç¿ëµÇÁö ¾Ê´Â Ŭ·¡½º´Â Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
¾ð±ÞÇÑ HelloWorld ÄÄÆÄÀϽà ¿ë·® Â÷ÀÌ´Â 1MB ¹Ì¸¸À¸·Î ¸Å¿ì ¹Ì¹ÌÇßÁö¸¸, ±Ô¸ð°¡ Ä¿Áú ¼ö·Ï µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
Ŭ·¡½º·Î´õ µî ¸®Ç÷º¼ÇÀ» ÀÌ¿ëÇÏ´Â °æ¿ì´Â gcj°¡ ¸ðµç Ŭ·¡½ºÀÇ »ç¿ëÀ» °¨ÁöÇÏÁö ¸øÇØ ½ÇÇàÁß ¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖÀ¸¹Ç·Î, ÁÖÀDZí°Ô »ç¿ëÇϵµ·Ï ÇÑ´Ù.
7.4. libgcj.dll ¸¸µé±â ¶gcj¸¦ ÀÌ¿ëÇÑ ÇÁ·Î±×·¥À» ¿©·µ ¸¸µå´Â °æ¿ì, libgcj¸¦ º°µµ·Î ¸ðµâÈÇÏ¿© ¿ë·®À» Å©°Ô ÁÙÀÏ ¼ö ÀÖ´Ù.
´ÙÀ½ ¹®¼µéÀ» Âü°íÇ϶ó.
°¡´ÉÇÏ´Ù¸é java.awt.*, javax.swing.* µîÀÇ ÆÐÅ°Áö¸¦ Á¦°ÅÇÏ´Â °Íµµ µµ¿òÀÌ µÉ °ÍÀÌ´Ù.
7.5. UPX¸¦ ÀÌ¿ëÇÑ ¹æ¹ý ¶UPX¸¦ »ç¿ëÇÏ´Â °Íµµ ÇϳªÀÇ ¹æ¹ýÀÌ´Ù. ¾ÐÃà ¼Óµµ°¡ ¸Å¿ì ºü¸£¸ç ½ÇÇà ¼Óµµ¿¡µµ °ÅÀÇ ¿µÇâÀ» ¹ÌÄ¡Áö ¾ÊÁö¸¸, ´ë½Å ¸Þ¸ð¸® Á¡À¯À²ÀÌ ¾ÐÃàÀü ÆÄÀÏÀÇ ¿ë·®¸¸Å ´Ã¾î³´Ù.
»ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
# upx -1 -o CompressedFoo.exe FatFoo.exe
´ÙÀ½Àº ¾Õ¼ ¾ð±ÞÇÑ ÇÁ·Î±×·¥À» UPX¸¦ »ç¿ëÇØ ¾ÐÃàÇÑ °á°úÀÌ´Ù. ºñ±³Àû Àú»ç¾çÀÎ ¼¿400MHz¿¡ 256M ·¥, ÄöÅÒ ÆÄÀ̾ 6G HDD¸¦ »ç¿ëÇß´Ù.
°¡Àå ºü¸¥ ¾ÐÃà¿¡¼Á¶Â÷ ½ÇÇà ÆÄÀÏÀÇ Å©±â°¡ Àý¹Ý ÀÌÇÏ·Î ÁÙ¾îµç °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. 8. GCJ Bug & Patch ¶
¹®¼ ÀÏÁö
See Also
from wiki.kldp.org by me
|
Might as well be frank, monsieur. It would take a miracle to get you out of Casablanca. |