¡¡¡¡1 Linux ϵÄÈí¼þά»¤ºÍ½¨Á¢¹¤¾ß
¡¡¡¡¶Ô¿ª·ÅÔ´ÂëµÄ×ÔÓÉÈí¼þÀ´Ëµ£¬³ÌÐòÔ±µÃµ½µÄͨ³£ÊÇÔ´´úÂë¡£ÔÚ±àÒëÔ´´úÂë²¢ÕýÈ·°²×°ºÍÅäÖõĹý³ÌÖУ¬ÍùÍù»áÉæ¼°µ½Ðí¶à¹¤¾ßºÍº¯Êý¿â£¬Òò´ËÆä¹ý³Ì¾³£ÏÔµÃÓÐЩ·±¸´¡£MiniGUIÒ²²»ÀýÍ⡣ΪÁË˵Ã÷ MiniGUI µÄÕýÈ·±àÒëºÍ°²×°¹ý³Ì£¬ÎÒÃÇÓбØÒªÊ×ÏÈÁ˽â Linux ϵͳÏÂÓÃÓÚÈí¼þά»¤ºÍ½¨Á¢µÄ¹¤¾ß¡£
¡¡¡¡1.1 make ºÍ makefile
¡¡¡¡make ÊÇ Linux ÏÂ×î³£ÓõĶþ½øÖƳÌÐò¡¢º¯Êý¿âµÄ½¨Á¢Éú³É¹¤¾ß¡£make ÔËÐÐʱҪ¸ù¾Ýµ±Ç°Ä¿Â¼Ï嵀 makefile Îļþ£¨Ò»°ãÊÇ Makefile£©£¬È·¶¨ÒªÉú³ÉʲôÑùµÄ¶þ½øÖÆÎļþ£¬ÒÔ¼°¶ÔÓ¦µÄÃüÁî¡£ÎÒÃÇ»¹¿ÉÒÔÔÚ makefile ÎļþÖн¨Á¢ÒªÉú³ÉµÄÄ¿±êÓëÔ´´úÂëÖ®¼äµÄÒÀÀµ¹Øϵ£¬´Ó¶ø¿ÉÒÔÈà make ¹¤¾ß¸ù¾Ýʱ¼ä×Ô¶¯ÅжÏÊÇ·ñÐèҪͨ¹ýÖмä¹ý³Ì¶øÉú³É×îÖÕÄ¿±ê¡£¾¡¹Üͨ¹ý makefile Îļþ¿ÉÒÔ×éÖ¯Ò»¸ö´óµÄÏîÄ¿£¬µ«ÍùÍùÊÖ¹¤±àдһ¸ö makefile Îļþ²¢²»ÊÇÒ»¼þÇáËɵÄÊÂÇ飬²¢ÇÒÔÚÐèҪά»¤Ò»¸öÔ´´úÂëµÄĿ¼Ê÷ʱ£¬makefile ÎļþµÄά»¤¹¤×÷¾Í»á´ó´óÔö¼Ó¡£Îª´Ë£¬GNU ÓÖ¿ª·¢ÁË Autoconfi/Automake ¹¤¾ß£¬¿ÉÒÔÓÃÀ´×Ô¶¯Éú³É makefile Îļþ£¬²¢ÇÒÄܹ»¼ì²éϵͳµÄÅäÖÃÐÅÏ¢£¬´Ó¶ø°ïÖúÌṩԴ´úÂëµÄ¿ÉÒÆÖ²ÐÔ¡£
¡¡¡¡1.2 Autoconf/Automake
¡¡¡¡GNU µÄ Autoconf ¼° Automake ÕâÁ½¸öÈí¼þʵ¼ÊÊÇÓÉÈô¸É Shell ½Å±¾×é³ÉµÄ£¬Ëü¿ÉÒÔ°ïÖú³ÌÐòÔ±ÇáËɲúÉú makefile Îļþ¡£ÏÖÔڵĸ÷ÖÖ×ÔÓÉÈí¼þ£¬ÈçApache¡¢MySQL µÈ¶¼ÊÇÀûÓÃAutoconf,Automake ʵÏÖ×Ô¶¯ÅäÖúͱàÒëµÄ¡£MiniGUI Ò²²ÉÓÃÁË Autoconf/Automake ½Ó¿Ú¡£Óû§Ö»ÒªÊ¹ÓÃ"./configure"¡¢"make"¡¢"make install" ¾Í¿ÉÒ԰ѳÌÐò±àÒë²¢°²Ñ⵽ϵͳÖС£
¡¡¡¡ÎªÁ˸üºÃµØÁ˽â Autoconf ºÍ Automake£¬ÎÒÃÇÐèÒª¶Ô makefile ×÷Ò»¼òµ¥»Ø¹Ë¡£Makefile »ù±¾ÉϾÍÊÇ"Ä¿±ê"£¨target£©¡¢"ÒÀÀµÐÔ"£¨dependencies£©ºÍ"¶¯×÷"ÈýÕßËù×é³ÉµÄһϵÁйæÔò¡£¶ø make ¾ÍÊǸù¾Ý makefile ÎļþµÄ¹æÔò¾ö¶¨ÈçºÎ±àÒ루compile£©ºÍÁ¬½Ó £¨link£©³ÌÐò»òÕßÆäËü¶¯×÷¡£µ±È»£¬make ¿É×öµÄ²»Ö»ÊDZàÒëºÍÁ¬½Ó³ÌÐò£¬ÀýÈç FreeBSD µÄ port collection ÖУ¬Makefile»¹¿ÉÒÔ×öµ½×Ô¶¯ÏÂÔØÔ¶³Ì³ÌÐò£¬½âѹËõ£¨extract£©£¬´ò²¹¶¡ £¨patch£©£¬È»ºó±àÒë²¢°²×°µ½ÏµÍ³ÖС£
¡¡¡¡Makefile »ù±¾½á¹¹ËäÈ»ºÜ¼òµ¥£¬µ«ÊÇÍ×ÉÆÔËÓÃÕâЩ¹æÔò¾Í¿ÉÒԱ任³öÐí¶à²»Í¬µÄ»¨Ñù¡£È´Ò²ÒòΪÕâÑù£¬Ðí¶àÈ˸տªÊ¼Ñ§Ð´makefile ʱ»á¾õµÃûÓй淶¿ÉÒÔ×ñÑ£¬Ã¿¸öÈËд³öÀ´µÄmakefile¶¼²»´óÒ»Ñù£¬²»ÖªµÀ´ÓÄÄÀïÏÂÊÖ£¬¶øÇÒ³£³£»áÊܵ½¿ª·¢»·¾³µÄÏÞÖÆ£¬Ö»Òª»·¾³²ÎÊý²»Í¬»òÕß·¾¶¸ü¸Ä£¬¿ÉÄÜ makefile ¾ÍµÃ¸ú×ÅÐ޸ġ£ËäÈ»ÓÐGNU Makefile Conventions £¨GNU Makefile¹ßÀý£©Öƶ©³öһЩÔÚ½øÐÐ GNU ³ÌÐòÉè¼Æʱ±àд makefile µÄһЩ±ê×¼ºÍ¹æ·¶£¬µ«ÊÇÆäÄÚÈݺܳ¤¶øÇҺܸ´ÔÓ£¬²¢ÇÒ¾³£×÷һЩµ÷Õû£¬ÎªÁ˼õÇá³ÌÐò¿ª·¢ÈËԱά»¤makefile µÄ¸ºµ££¬¾Í³öÏÖÁËAutomake¡£
¡¡¡¡ÀûÓÃAutomake£¬±à³ÌÕßÖ»ÐèҪдһЩԤÏȶ¨ÒåºÃµÄºê£¨macro£©£¬Ìá½»¸øAutomake´¦Àí£¬¾Í»á²úÉúÒ»¸ö¿ÉÒÔ¹© Autoconf ʹÓÃµÄ Makefile.inÎļþ¡£ÔÙÅäºÏʹÓà Autoconf²úÉúµÄ×Ô¶¯ÅäÖÃÎļþ configure ¼´¿É²úÉúÒ»·Ý·ûºÏ GNU Makefile ¹ßÀýµÄ Makeifle ÁË¡£
¡¡¡¡ÔÚ¿ªÊ¼Ê¹Óà Automake ֮ǰ£¬Ê×ÏÈÈ·ÈÏÄãµÄϵͳ°²×°ÓÐÈçÏÂÈí¼þ£º
¡¡¡¡GNU Automake
¡¡¡¡GNU Autoconf
¡¡¡¡GNU m4
¡¡¡¡perl
¡¡¡¡GNU Libtool £¨Èç¹ûÄãÐèÒª²úÉú¹²Ïí¿â£©
¡¡¡¡×îºÃҲʹÓà GNU C/C++ ±àÒëÆ÷¡¢GNU Make ÒÔ¼°ÆäËü GNU µÄ¹¤¾ß³ÌÐòÀ´×÷Ϊ¿ª·¢µÄ»·¾³£¬ÕâЩ¹¤¾ß¶¼ÊÇÊôÓÚ GPL µÄ×ÔÓÉÈí¼þ£¬²»µ«Ãâ·Ñ¶øÇÒ¹¦ÄÜÇ¿´ó¡£Èç¹ûÄãÊÇʹÓà Red Hat Linux£¬¿ÉÒÔÕÒµ½ËùÓÐÉÏÊöÈí¼þµÄ rpm Îļþ¡£
¡¡¡¡ÀûÓà configure Ëù²úÉúµÄ MakefileÎļþÓм¸¸öÔ¤ÏÈÉ趨µÄÄ¿±ê¿É¹©Ê¹Óã¬ÕâÀïÖ»¶ÔÆäÖм¸¸ö¼òÊöÈçÏ¡£
¡¡¡¡make all ²úÉúÉ趨µÄÄ¿±ê¡£Ö»ÇÃÈëmake Ò²¿ÉÒÔ£¬´Ëʱ»á¿ªÊ¼±àÒëÔ´´úÂ룬ȻºóÁ¬½Ó²¢²úÉúÖ´ÐÐÎļþ¡£
¡¡¡¡make clean Çå³ý֮ǰËù±àÒëµÄ¿ÉÖ´ÐÐÎļþ¼°Ä¿±êÎļþ£¨*.o£©¡£
¡¡¡¡make distclean ³ýÁËÇå³ý¿ÉÖ´ÐÐÎļþºÍÄ¿±êÎļþÒÔÍ⣬Ҳ°Ñ configure Ëù²úÉúµÄ Makefile Çå³ýµô¡£ ͨ³£ÔÚ·¢²¼Èí¼þÇ°Ö´ÐиÃÃüÁî¡£
¡¡¡¡make install ½«³ÌÐò°²×°µ½ÏµÍ³ÖУ¬ÈôÔ´Âë±àÒë³É¹¦£¬ÇÒÖ´Ðнá¹ûÕýÈ·£¬±ã¿ÉÒ԰ѳÌÐò°²×°µ½ÏµÍ³Ô¤ÏÈÉ趨µÄÖ´ÐÐÎļþ´æ·Å·¾¶ÖУ¬ÈôÓà bin_PROGRAMS ºêµÄ»°£¬³ÌÐò»á±»°²×°µ½ /usr/local/binÏ¡£
¡¡¡¡make dist ½«³ÌÐòºÍÏà¹ØµÄÎĵµ°üװΪһ¸öѹËõÎĵµÒÔ¹©·¢²¼¡£Ö´ÐÐÍêÔÚĿ¼Ï»á²úÉúÒ»¸öÒÔPACKAGE-VERSION.tar.gz ΪÃû³ÆµÄÎļþ¡£PACKAGE ºÍ VERSION ÕâÁ½¸ö²ÎÊýÊǸù¾Ý configure.in ÎÄÖÐ AM_INIT_AUTOMAKE(PACKAGE, VERSION) µÄ¶¨Òå¡£
lgms2008 ÓÚ 2006-11-02 09:30:20·¢±í:
¡¡¡¡2 MiniGUI µÄÒÀÀµ¿â
¡¡¡¡ÎªÁËÕýÈ·°²×° MiniGUI£¬ÐèÒªÁ˽â MiniGUI µÄÕý³£ÔËÐÐÐèÒªÄÄЩº¯Êý¿â£¬Ò²¼´ MiniGUI µÄÒÀÀµ¿â¡£ÔÚ±àÒë MiniGUI ֮ǰ£¬Ê×ÏÈҪȷ±£ÕýÈ·°²×°ÁËËùÐèµÄÒÀÀµ¿â¡£
¡¡¡¡2.1 LibGGI »òÕß SVGALib
¡¡¡¡ÕâÁ½¸öº¯Êý¿â¿ÉÒÔΪ MiniGUI Ìṩµ×²ãͼÐÎÖ§³Ö£¬ÎÒÃdzÆ֮Ϊ¡°Í¼ÐÎÒýÇ桱¡£ÆäÖÐ SVGALib ÊÇÒ»¸ö±È½ÏÀϵĺ¯Êý¿â£¬Ö»Ìṩ¶Ô Linux ¿ØÖÆ̨µÄÖ§³Ö£»LibGGI ÊÇÒ»¸ö±È½ÏеÄͼÐκ¯Êý¿â£¬ÌṩÁË¶Ô Linux ¿ØÖÆ̨¡¢X Window µÈµÄÖ§³Ö£¬²¢ÇÒ½Ó¿ÚÏà¶Ô¼òµ¥¡£ÒªÕýȷʹÓà MiniGUI£¬ÐèÒª°²×° LibGGI »òÕß SVGALib µÄÐÞ¶©°æ¡£±ÊÕß½¨Òé°²×° LibGGI£¬ÒòΪËüÌṩÁË¶Ô Linux ¿ØÖÆ̨ºÍ X µÄÖ§³Ö¡£ÔÚ Linux Ï£¬½¨Á¢ÔÚ LibGGI Ö®ÉϵijÌÐò¼È¿ÉÒÔÔËÐÐÔÚ Linux ¿ØÖÆ̨ÉÏ£¬Ò²¿ÉÒÔÔËÐÐÔÚ X Window ÉÏ£¬´Ó¶ø¿ÉÒÔÌá¸ß³ÌÐòµÄ¿ÉÒÆÖ²ÐÔ¡£²¢ÇÒ¶Ô MiniGUI À´Ëµ£¬Èç¹ûÄܹ»ÔËÐÐÔÚ X Window ÉÏ£¬¾Í¿ÉÒÔ´ó´ó·½±ã³ÌÐòµÄµ÷ÊÔ¡£LibGGI µÄÁíÍâÒ»¸öºÃ´¦¾ÍÊÇÔÚ Linux ¿ØÖÆ̨ÉÏ£¬Ëü¿ÉÒÔÔËÐÐÔÚ Linux 2.2 ÄÚºËËùÌṩµÄ FrameBuffer Çý¶¯³ÌÐòÖ®ÉÏ£¬¶ø²»ÐèÒª¶ÔÏÔʾоƬ½øÐÐÖ±½ÓµÄÓ²¼þ±à³Ì£¬Òò¶øÒ²²»ÐèÒª³¬¼¶Óû§È¨ÏÞÈ¥ÔËÐгÌÐò¡£ÕâµãºÍ SVGALib ²»Í¬£¬SVGALib ²»Ö§³Ö FrameBuffer£¬Í¬Ê±ÐèÒª³¬¼¶Óû§È¨ÏÞ¡£
¡¡¡¡Èç¹û¶ÁÕßʹÓõÄÊÇ Linux ÄÚºË 2.0.xx£¬¾Í±ØÐëʹÓà SVGALib¡£Õâ¸öº¯Êý¿âʵ¼ÊÊÇÁ½¸ö¿â×é³ÉµÄ£¬¼´ vga ºÍ vgagl¡£MiniGUI ʹÓõÄÊÇ vgagl£¬¸Ãº¯Êý¿âÔÚ vga Ö®ÉÏÔËÐУ¬ÌṩÁ˽ϺõÄͼÐκ¯Êý¡£µ«ÊÇ£¬ÎÒÃDz»ÄÜʹÓñê×¼µÄ SVGALib º¯Êý¿â£¬ÒòΪ¸Ãº¯Êý¿âºÍ Linux É쵀 Pthread º¯Êý¿âÏà³åÍ»??ËüÃǾùʹÓÃÁË SIGUSR1 ºÍ SIGUSR2 ÕâÁ½¸öÓɲÙ×÷ϵͳ±£Áô¸øÓ¦ÓóÌÐòµÄÐźţ¬´Ó¶ø»áµ¼Ö²»¿ÉÔ¤ÁϵĽá¹û¡£Îª´Ë£¬ÎÒÃÇ¶Ô SVGALib ½øÐÐÁËÐ޸ġ£¶ÁÕßÓ¦¸ÃʹÓþ¹ýÎÒÃÇÐÞ¸ÄµÄ SVGALib º¯Êý¿â£¬¸Ãº¯Êý¿âͬʱÌṩÁËÓÃÓÚ´¦Àí GB2312 ×ÖÌåÏÔʾµÄº¯Êý¡£»¹Òª×¢ÒâµÄÊÇ£¬±ê×¼ SVGALib µÄ vgagl ¿â²»Ìṩ¶Ô±ê×¼ VGA 16 ɫģʽµÄÖ§³Ö£¬Òò´Ë£¬Èç¹ûÒªÔÚ VGA 16 ɫģʽÏÂÔËÐÐ MiniGUI£¬ÐèÒªÏÂÔØ vgagl4 º¯Êý¿â¡£
lgms2008 ÓÚ 2006-11-02 09:29:43·¢±í:
¡¡¡¡make distcheck ºÍ make dist ÀàËÆ£¬µ«ÊǼÓÈë¼ì²é°ü×°ÒÔºóµÄѹËõÎļþÊÇ·ñÕý³££¬Õâ¸öÄ¿±ê³ýÁ˰ѳÌÐòºÍÏà¹ØÎĵµ°ü×°³É tar.gz ÎļþÍ⣬»¹»á×Ô¶¯°ÑÕâ¸öѹËõÎļþ½â¿ª£¬Ö´ÐÐ configure£¬²¢Ö´ÐÐ make all £¬È·ÈϱàÒëÎÞ´íÎóÒԺ󣬷½ÏÔʾÕâ¸ö tar.gz ÎļþÒѾ׼±¸ºÃ²¢¿ÉÒÔ·¢²¼ÁË¡£
¡¡¡¡Òª×¢ÒâµÄÊÇ£¬ÀûÓà Autoconf ¼° Automake Ëù²úÉú³ö?µÄÈí¼þÌ×¼þÊÇ¿ÉÒÔÔÚûÓа²×° Autoconf ¼° Automake µÄ»·¾³Ê¹Óõģ¬ÒòΪ configure ÊÇÒ»¸ö shell script£¬Ëü¼º±»Éè¼ÆΪ¿ÉÒÔÔÚÒ»°ã Unix µÄ sh Õâ¸ö shell ÏÂÖ´ÐС£µ«ÊÇÈç¹ûÒªÐÞ¸Ä configure.in ¼° Makefile.am ÎļþÔÙ²úÉúÐ嵀 configure ¼° Makefile.in Îļþʱ¾ÍÒ»¶¨ÒªÓÐ Autoconf ¼° Automake ÁË¡£
¡¡¡¡1.3 ldd ºÍ ldconfig
¡¡¡¡ldd ÊÇÓÃÀ´¼ì²é¿ÉÖ´ÐÐÎļþËùÐèÒªµÄ¹²Ïí¿â¡£ÀýÈ磺 $ ldd /bin/ls
¡¡¡¡¡¡¡¡¡¡¡¡libtermcap.so.2 => /lib/libtermcap.so.2 (0x4001c000)
¡¡¡¡¡¡¡¡¡¡¡¡libc.so.6 => /lib/libc.so.6 (0x40020000)
¡¡¡¡¡¡¡¡¡¡¡¡/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
¡¡¡¡
¡¡¡¡ÎÒÃÇÔÚ /bin/ls ³ÌÐòÉÏÔËÐÐ ldd ÃüÁ¾Í¿ÉÒÔ¼ì²é¸Ã³ÌÐòËùʹÓõĹ²Ïí¿â¡£×¢ÒâÔÚ ldd ÃüÁî´òÓ¡µÄ½á¹ûÖУ¬¡°=>¡±×ó±ßµÄ±íʾ¸Ã³ÌÐòÐèÒªÁ¬½ÓµÄ¹²Ïí¿âÖ® so Ãû³Æ£¬Óұ߱íʾÓÉ Linux µÄ¹²Ïí¿âϵͳÕÒµ½µÄ¶ÔÓ¦µÄ¹²Ïí¿âÔÚÎļþϵͳÖеľßÌåλÖá£Ä¬ÈÏÇé¿öÏ£¬/etc/ld.so.conf ÎļþÖаüº¬ÓÐĬÈϵĹ²Ïí¿âËÑË÷·¾¶£¬ÀýÈ磺
¡¡¡¡/usr/X11R6/lib
¡¡¡¡/usr/lib
¡¡¡¡/usr/i486-linux-libc5/lib
¡¡¡¡/usr/lib/qt-2.0.1/lib
¡¡¡¡/usr/lib/qt-1.44/lib
¡¡¡¡/usr/lib/qt-2.1.0/lib
¡¡¡¡/usr/kerberos/lib
¡¡¡¡/usr/lib/qt-1.45/lib
¡¡¡¡Èç¹û ldd ûÓÐÕÒµ½¶ÔÓ¦µÄ¹²Ïí¿âÎļþµÄ¾ßÌåλÖ㬿ÉÄÜÊÇÁ½ÖÖÇé¿öÒýÆðµÄ£º
¡¡¡¡¹²Ïí¿âûÓа²×°ÔÚ¸ÃϵͳÖУ»
¡¡¡¡¹²Ïí¿â±£´æÔÚ /etc/ld.so.conf ÎļþÁгöµÄËÑË÷·¾¶Ö®ÍâµÄλÖá£
¡¡¡¡Í¨³£Çé¿öÏ£¬Ðí¶à¿ª·ÅÔ´´úÂëµÄ³ÌÐò»òº¯Êý¿â¶¼»áĬÈϽ«×Ô¼º°²×°µ½ /usr/local Ŀ¼ÏµÄÏàӦλÖã¨/usr/local/bin »ò /usr/local/lib£©£¬ÒÔ±ãÓëϵͳ×ÔÉíµÄ³ÌÐò»òº¯Êý¿âÏàÇø±ð¡£¶øÐí¶à Linux ϵͳµÄ /etc/ld.so.conf ÎļþÖÐĬÈÏÓÖ²»°üº¬ /usr/local/lib¡£Òò´Ë£¬ÍùÍù»á³öÏÖÒѾ°²×°Á˹²Ïí¿â£¬µ«ÊÇÈ´ÎÞ·¨ÕÒµ½¹²Ïí¿âµÄÇé¿ö¡£Õâʱ£¬¾ÍÓ¦¸Ã¼ì²é /etc/ld.so.conf Îļþ£¬Èç¹ûÆäÖÐȱÉÙ /usr/local/lib Ŀ¼£¬¾ÍÓ¦¸ÃÌí¼Ó½øÈ¥¡£
¡¡¡¡ÔÚÐÞ¸ÄÁË /etc/ld.so.conf Îļþ»òÕßÔÚϵͳÖа²×°ÁËеĺ¯Êý¿âÖ®ºó£¬»¹ÒªÔËÐÐÒ»¸öÃüÁ¼´ ldconfig¡£¸ÃÃüÁîÓÃÀ´Ë¢ÐÂϵͳµÄ¹²Ïí¿â»º´æ£¬¼´ /etc/ld.so.cache Îļþ¡£ÎªÁ˼õÉÙ¹²Ïí¿âϵͳµÄ¿âËÑË÷ʱ¼ä£¬¹²Ïí¿âϵͳά»¤ÁËÒ»¸ö¹²Ïí¿â so Ãû³ÆµÄ»º´æÎļþ¡£Òò´Ë£¬ÔÚ°²×°ÐµĹ²Ïí¿âÖ®ºó£¬Ò»¶¨ÒªÔËÐÐ ldconfig ˢиûº´æ¡£