[LinuxFocus-icon]
Ê×Ò³  |  Õ¾µãµØÍ¼  |  Ë÷Òý  |  ËÑË÷

ÐÂÎÅ | ¹ýÍùÆÚ¿¯ | Á´½Ó | ¹ØÓÚLF
[an error occurred while processing this directive]
[Lorne Bailey]
by Lorne Bailey
<sherm_pbody(at)yahoo.com>

¹ØÓÚ×÷Õß:

LorneסÔÚÖ¥¼Ó¸ç£¬ËûÊÇÒ»¸ö¼ÆËã»ú×ÉѯÈË£¬ËûµÄÌØ³¤ÊǰÑÊý¾Ýµ¼Èëµ¼³öOracleÊý¾Ý¿â¡£ ×Ô´ÓתÏò³ÌÐòÉè¼ÆÁìÓòºó£¬ËûһֱʹÓÃ*nix»·¾³£¬LorneÍêÈ«±Ü¿ªÁË¡°DLLµØÓü¡±¡£ ËûÕýÔÚ¹¥¶Á¼ÆËã»ú¿ÆÑ§Ë¶Ê¿Ñ§Î»¡£


Ŀ¼:

 

GCC - Ò»ÇдÓÕâÀ↑ʼ

[Illustration]

ÕªÒª:

ÒªÏë¶Á¶®±¾ÎÄ£¬ÄãÐèÒª¶ÔCÓïÑÔÓлù±¾µÄÁ˽⣬±¾ÎĽ«½éÉÜÈçºÎʹÓÃgcc±àÒëÆ÷¡£ Ê×ÏÈ£¬ÎÒÃǽéÉÜÈçºÎÔÚÃüÁîÐз½Ê½ÏÂʹÓñàÒëÆ÷±àÒë¼òµ¥µÄCÔ´´úÂë¡£ È»ºó£¬ÎÒÃǼòÒª½éÉÜһϱàÒëÆ÷¾¿¾¹×÷ÁËÄÇЩ¹¤×÷£¬ÒÔ¼°ÈçºÎ¿ØÖƱàÒë¹ý³Ì¡£ ÎÒÃÇÒ²¼òÒª½éÉÜÁ˵÷ÊÔÆ÷µÄʹÓ÷½·¨¡£

 

GCC rules

ÄãÄÜÏëÏóʹÓ÷â±ÕÔ´´úÂëµÄ˽ÓбàÒëÆ÷±àÒë×ÔÓÉÈí¼þÂð£¿ÄãÔõô֪µÀ±àÒëÆ÷ÔÚÄãµÄ ¿ÉÖ´ÐÐÎļþÖмÓÈëÁËʲô£¿¿ÉÄÜ»á¼ÓÈë¸÷ÖÖºóÃźÍľÂí¡£Ken ThompsonÊÇÒ»¸öÖøÃû µÄºÚ¿Í£¬Ëû±àдÁËÒ»¸ö±àÒëÆ÷£¬µ±±àÒëÆ÷±àÒë×Ô¼ºÊ±£¬¾ÍÔÚ'login'³ÌÐòÖÐÁôϺóÃÅ ºÍÓÀ¾ÃµÄľÂí¡£Çëµ½ ÕâÀï ÔĶÁËû¶Ô Õâ¸ö½Ü×÷µÄÃèÊö¡£ÐÒÔ˵ÄÊÇ£¬ÎÒÃÇÓÐÁËgcc¡£µ±Äã½øÐÐ configure; make; make install ʱ£¬ gccÔÚÄ»ºó×öÁËºÜ¶à·±ÖØµÄ¹¤×÷¡£ÈçºÎ²ÅÄÜÈÃgccΪÎÒÃǹ¤×÷ÄØ£¿ÎÒÃǽ«¿ªÊ¼±àдһ¸öֽůÓÎÏ·£¬ ²»¹ýÎÒÃÇÖ»ÊÇΪÁËÑÝʾ±àÒëÆ÷µÄ¹¦ÄÜ£¬ËùÒÔ¾¡¿ÉÄܵؾ«¼òÁË´úÂë¡£ ÎÒÃǽ«´ÓÍ·¿ªÊ¼Ò»²½Ò»²½µØ×ö£¬ÒÔ±ãÀí½â±àÒë¹ý³Ì£¬Á˽âΪÁËÖÆ×÷¿ÉÖ´ÐÐÎļþÐèÒª ×öЩʲô£¬°´Ê²Ã´Ë³Ðò×ö¡£ÎÒÃǽ«¿´¿´ÈçºÎ±àÒëC³ÌÐò£¬ÒÔ¼°ÈçºÎʹÓñàÒëÑ¡Ïî ÈÃgcc°´ÕÕÎÒÃǵÄÒªÇó¹¤×÷¡£²½Ö裨ÒÔ¼°ËùÓù¤¾ß£©ÈçÏ£º Ô¤±àÒë (gcc -E)£¬ ±àÒë (gcc)£¬ »ã±à (as)£¬ºÍ Á¬½Ó (ld)¡£

 

¿ªÊ¼...

Ê×ÏÈ£¬ÎÒÃÇÓ¦¸ÃÖªµÀÈçºÎµ÷ÓñàÒëÆ÷¡£Êµ¼ÊÉÏ£¬ÕâºÜ¼òµ¥¡£ÎÒÃǽ«´ÓÄǸöÖøÃûµÄµÚÒ»¸öC³ÌÐò¿ªÊ¼¡£ £¨¸÷λÀÏǰ±²£¬ÇëÔ­ÁÂÎÒ£©¡£

#include <stdio.h>

int main()
{ printf("Hello World!\n"); }

°ÑÕâ¸öÎļþ±£´æÎª game.c¡£ Äã¿ÉÒÔÔÚÃüÁîÐÐϱàÒëËü£º

gcc game.c
ÔÚĬÈÏÇé¿öÏ£¬C±àÒëÆ÷½«Éú³ÉÒ»¸öÃûΪ a.out µÄ¿ÉÖ´ÐÐÎļþ¡£ Äã¿ÉÒÔ¼üÈëÈçÏÂÃüÁîÔËÐÐËü£º
a.out
Hello World

ÿһ´Î±àÒë³ÌÐòʱ£¬Ð嵀 a.out ½«¸²¸ÇÔ­À´µÄ³ÌÐò¡£ÄãÎÞ·¨ÖªµÀÊÇÄĸö ³ÌÐò´´½¨ÁË a.out¡£ÎÒÃÇ¿ÉÒÔͨ¹ýʹÓà -o ±àÒëÑ¡Ï¸æËß gccÎÒÃÇÏë°Ñ¿ÉÖ´ÐÐÎļþ½ÐʲôÃû×Ö¡£ÎÒÃǽ«°ÑÕâ¸ö³ÌÐò½Ð×ö game£¬ÎÒÃÇ ¿ÉÒÔʹÓÃÈκÎÃû×Ö£¬ÒòΪCûÓÐJavaÄÇÑùµÄÃüÃûÏÞÖÆ¡£
gcc -o game game.c
game
Hello World

µ½ÏÖÔÚΪֹ£¬ÎÒÃÇÀëÒ»¸öÓÐÓõijÌÐò»¹²îµÃºÜÔ¶¡£Èç¹ûÄã¾õµÃ¾ÚÉ¥£¬Äã¿ÉÒÔÏëÒ»ÏëÎÒÃÇ ÒѾ­±àÒë²¢ÔËÐÐÁËÒ»¸ö³ÌÐò¡£ÒòΪÎÒÃǽ«Ò»µãÒ»µãΪÕâ¸ö³ÌÐòÌí¼Ó¹¦ÄÜ£¬ËùÒÔÎÒÃDZØÐë ±£Ö¤ÈÃËüÄܹ»ÔËÐС£Ëƺõÿ¸ö¸Õ¿ªÊ¼Ñ§±à³ÌµÄ³ÌÐòÔ±¶¼ÏëÒ»ÏÂ×Ó±àÒ»¸ö1000ÐеijÌÐò£¬ È»ºóÒ»´ÎÐÞ¸ÄËùÓеĴíÎó¡£Ã»ÓÐÈË£¬ÎÒÊÇ˵ûÓÐÈË£¬ÄÜ×öµ½Õâ¸ö¡£ÄãÓ¦¸ÃÏȱàÒ»¸ö¿ÉÒÔ ÔËÐеÄС³ÌÐò£¬ÐÞ¸ÄËü£¬È»ºóÔÙ´ÎÈÃËüÔËÐС£Õâ¿ÉÒÔÏÞÖÆÄãÒ»´ÎÐ޸ĵĴíÎóÊýÁ¿¡£ÁíÍ⣬ ÄãÖªµÀ¸Õ²Å×öÁËÄÄЩÐÞ¸Äʹ³ÌÐòÎÞ·¨ÔËÐУ¬Òò´ËÄãÖªµÀÓ¦¸Ã°Ñ×¢ÒâÁ¦·ÅÔÚÄÄÀï¡£Õâ¿ÉÒÔ ·ÀÖ¹ÕâÑùµÄÇé¿ö³öÏÖ£ºÄãÈÏΪÄã±àдµÄ¶«Î÷Ó¦¸ÃÄܹ»¹¤×÷£¬ËüÒ²ÄÜͨ¹ý±àÒ룬µ«Ëü¾ÍÊÇ ²»ÄÜÔËÐС£ÇëÇмǣ¬Äܹ»Í¨¹ý±àÒëµÄ³ÌÐò²¢²»Òâζ×ÅËüÊÇÕýÈ·µÄ¡£

ÏÂÒ»²½ÎªÎÒÃǵÄÓÎÏ·±àдһ¸öÍ·Îļþ¡£Í·Îļþ°ÑÊý¾ÝÀàÐͺͺ¯ÊýÉùÃ÷¼¯Öе½ÁËÒ»´¦¡£ Õâ¿ÉÒÔ±£Ö¤Êý¾Ý½á¹¹¶¨ÒåµÄÒ»ÖÂÐÔ£¬ÒÔ±ã³ÌÐòµÄÿһ²¿·Ö¶¼ÄÜÒÔͬÑùµÄ·½Ê½¿´´ýÒ»ÇÐÊÂÇé¡£

#ifndef DECK_H
#define DECK_H

#define DECKSIZE 52

typedef struct deck_t
{
  int card[DECKSIZE];
  /* number of cards used */
  int dealt;
}deck_t;

#endif /* DECK_H */

°ÑÕâ¸öÎļþ±£´æÎª deck.h¡£Ö»ÄܱàÒë .c Îļþ£¬ ËùÒÔÎÒÃDZØÐëÐÞ¸Ä game.c¡£ÔÚgame.cµÄµÚ2ÐУ¬Ð´ÉÏ #include "deck.h"¡£ ÔÚµÚ5ÐÐдÉÏ deck_t deck;¡£ÎªÁ˱£Ö¤ÎÒÃÇûÓиã´í£¬°ÑËüÖØÐ±àÒëÒ»´Î¡£

gcc -o game game.c

Èç¹ûûÓдíÎ󣬾ÍûÓÐÎÊÌâ¡£Èç¹û±àÒë²»ÄÜͨ¹ý£¬ÄÇô¾ÍÐÞ¸ÄËüÖ±µ½ÄÜͨ¹ýΪֹ¡£

 

Ô¤±àÒë

±àÒëÆ÷ÊÇÔõô֪µÀ deck_t ÀàÐÍÊÇʲôµÄÄØ£¿ÒòΪÔÚÔ¤±àÒëÆÚ¼ä£¬ Ëüʵ¼ÊÉϰÑ"deck.h"Îļþ¸´ÖƵ½ÁË"game.c"ÎļþÖС£Ô´´úÂëÖеÄÔ¤±àÒëָʾÒÔ"#"Ϊǰ׺¡£ Äã¿ÉÒÔͨ¹ýÔÚgccºó¼ÓÉÏ -E Ñ¡ÏîÀ´µ÷ÓÃÔ¤±àÒëÆ÷¡£

gcc -E -o game_precompile.txt game.c
wc -l game_precompile.txt
  3199 game_precompile.txt
¼¸ºõÓÐ3200ÐеÄÊä³ö£¡ÆäÖдó¶àÊýÀ´×Ô stdio.h °üº¬Îļþ£¬µ«ÊÇÈç¹û Äã²é¿´Õâ¸öÎļþµÄ»°£¬ÎÒÃǵÄÉùÃ÷Ò²ÔÚÄÇÀï¡£Èç¹ûÄã²»Óà -o Ñ¡ÏîÖ¸¶¨ Êä³öÎļþÃûµÄ»°£¬Ëü¾ÍÊä³öµ½¿ØÖÆÌ¨¡£Ô¤±àÒë¹ý³Ìͨ¹ýÍê³ÉÈý¸öÖ÷ÒªÈÎÎñ¸øÁË´úÂëºÜ´óµÄ Áé»îÐÔ¡£
  1. °Ñ"include"µÄÎļþ¿½±´µ½Òª±àÒëµÄÔ´ÎļþÖС£
  2. ÓÃʵ¼ÊÖµÌæ´ú"define"µÄÎı¾¡£
  3. ÔÚµ÷ÓúêµÄµØ·½½øÐкêÌæ»»¡£
Õâ¾ÍʹÄãÄܹ»ÔÚÕû¸öÔ´ÎļþÖÐʹÓ÷ûºÅ³£Á¿£¨¼´ÓÃDECKSIZE±íʾһ¸¶ÅÆÖеÄֽůÊýÁ¿£©£¬ ¶ø·ûºÅ³£Á¿ÊÇÔÚÒ»¸öµØ·½¶¨ÒåµÄ£¬Èç¹ûËüµÄÖµ·¢ÉúÁ˱仯£¬ËùÓÐʹÓ÷ûºÅ³£Á¿µÄµØ·½ ¶¼ÄÜ×Ô¶¯¸üС£ÔÚʵ¼ùÖУ¬Ä㼸ºõ²»ÐèÒªµ¥¶ÀʹÓà -E Ñ¡Ï¶øÊÇÈÃËü °ÑÊä³ö´«Ë͸ø±àÒëÆ÷¡£

 

±àÒë

×÷Ϊһ¸öÖм䲽Ö裬gcc°ÑÄãµÄ´úÂë·­Òë³É»ã±àÓïÑÔ¡£ËüÒ»¶¨ÒªÕâÑù×ö£¬Ëü±ØÐëͨ¹ý·ÖÎö ÄãµÄ´úÂë¸ãÇå³þÄ㾿¾¹ÏëÒª×öʲô¡£Èç¹ûÄã·¸ÁËÓï·¨´íÎó£¬Ëü¾Í»á¸æËßÄ㣬ÕâÑù±àÒë¾Íʧ°ÜÁË¡£ ÈËÃÇÓÐʱ»á°ÑÕâÒ»²½Îó½âΪÕû¸ö¹ý³Ì¡£µ«ÊÇ£¬Êµ¼ÊÉÏ»¹ÓÐÐí¶à¹¤×÷ÒªgccÈ¥×öÄØ¡£

 

»ã±à

as °Ñ»ã±àÓïÑÔ´úÂëת»»ÎªÄ¿±ê´úÂë¡£ÊÂʵÉÏÄ¿±ê´úÂë²¢²»ÄÜÔÚCPUÉÏÔËÐУ¬ µ«ËüÀëÍê³ÉÒѾ­ºÜ½üÁË¡£±àÒëÆ÷Ñ¡Ïî -c °Ñ .c Îļþת»»ÎªÒÔ .o ΪÀ©Õ¹Ãû µÄÄ¿±êÎļþ¡£ Èç¹ûÎÒÃÇÔËÐÐ

gcc -c game.c
ÎÒÃǾÍ×Ô¶¯´´½¨ÁËÒ»¸öÃûΪgame.oµÄÎļþ¡£ÕâÀïÎÒÃÇÅöµ½ÁËÒ»¸öÖØÒªµÄÎÊÌâ¡£ÎÒÃÇ¿ÉÒÔÓà ÈÎÒâÒ»¸ö .c Îļþ´´½¨Ò»¸öÄ¿±êÎļþ¡£ÕýÈçÎÒÃÇÔÚÏÂÃæËù¿´µ½µÄ£¬ÔÚÁ¬½Ó²½ÖèÖÐÎÒÃÇ¿ÉÒÔ °ÑÕâЩĿ±êÎļþ×éºÏ³É¿ÉÖ´ÐÐÎļþ¡£ÈÃÎÒÃǼÌÐø½éÉÜÎÒÃǵÄÀý×Ó¡£ÒòΪÎÒÃÇÕýÔÚ±àдһ¸ö ֽůÓÎÏ·£¬ÎÒÃÇÒѾ­°ÑÒ»¸¶Åƶ¨ÒåΪ deck_t£¬ÎÒÃǽ«±àдһ¸öÏ´ÅÆº¯Êý¡£ Õâ¸öº¯Êý½ÓÊÜÒ»¸öÖ¸ÏòdeckÀàÐ͵ÄÖ¸Õ룬²¢°ÑÒ»¸¶Ëæ»úµÄůװÈëdeckÀàÐÍ¡£ËüʹÓÃ'drawn' Êý×é¸ú×ټǼÄÇÐ©ÅÆÒѾ­ÓùýÁË¡£Õâ¸ö¾ßÓÐDECKSIZE¸öÔªËØµÄÊý×é¿ÉÒÔ·ÀÖ¹ÎÒÃÇÖØ¸´Ê¹Óà һÕÅÅÆ¡£

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "deck.h"

static time_t seed = 0;

void shuffle(deck_t *pdeck)
{
  /* Keeps track of what numbers have been used */
  int drawn[DECKSIZE] = {0};
  int i;

  /* One time initialization of rand */
  if(0 == seed)
  {
    seed = time(NULL);
    srand(seed);
  }
  for(i = 0; i < DECKSIZE; i++)
  {
    int value = -1;
    do
    {
      value = rand() % DECKSIZE;
    }
    while(drawn[value] != 0);

    /* mark value as used */
    drawn[value] = 1;

    /* debug statement */
    printf("%i\n", value);
    pdeck->card[i] = value;
  }
  pdeck->dealt = 0;
  return;
}

°ÑÕâ¸öÎļþ±£´æÎª shuffle.c¡£ÎÒÃÇÔÚÕâ¸ö´úÂëÖмÓÈëÁËÒ»Ìõµ÷ÊÔÓï¾ä£¬ ÒÔ±ãÔËÐÐʱ£¬ÄÜÊä³öËù²úÉúµÄÅÆºÅ¡£ÕⲢûÓÐΪÎÒÃǵijÌÐòÌí¼Ó¹¦ÄÜ£¬µ«ÊÇÏÖÔÚµ½ÁË ¹Ø¼üʱ¿Ì£¬ÎÒÃÇ¿´¿´¾¿¾¹·¢ÉúÁËʲô¡£ÒòΪÎÒÃǵÄÓÎÏ·»¹ÔÚ³õ¼¶½×¶Î£¬ÎÒÃÇûÓбðµÄ °ì·¨È·¶¨ÎÒÃǵĺ¯ÊýÊÇ·ñʵÏÖÁËÎÒÃÇÒªÇóµÄ¹¦ÄÜ¡£Ê¹ÓÃÄÇÌõprintfÓï¾ä£¬ÎÒÃǾÍÄÜ׼ȷ µØÖªµÀÏÖÔÚ¾¿¾¹·¢ÉúÁËʲô£¬ÒÔ±ãÔÚ¿ªÊ¼ÏÂÒ»½×¶Î֮ǰÎÒÃÇÖªµÀÅÆÒѾ­Ï´ºÃÁË¡£ÔÚÎÒÃÇ ¶ÔËüµÄ¹¤×÷¸Ðµ½ÂúÒâÖ®ºó£¬ÎÒÃÇ¿ÉÒÔ°ÑÄÇÒ»ÐÐÓï¾ä´Ó´úÂëÖÐɾµô¡£ÕâÖÖµ÷ÊÔ³ÌÐòµÄ¼¼Êõ ¿´ÆðÀ´ºÜ´Ö²Ú£¬µ«ËüʹÓÃ×îÉÙµÄÓï¾äÍê³ÉÁ˵÷ÊÔÈÎÎñ¡£ÒÔºóÎÒÃÇÔÙ½éÉܸü¸´Ôӵĵ÷ÊÔÆ÷¡£

Çë×¢ÒâÁ½¸öÎÊÌâ¡£
  1. ÎÒÃÇÓô«Ö··½Ê½´«µÝ²ÎÊý£¬Äã¿ÉÒÔ´Ó'&'£¨È¡µØÖ·£©²Ù×÷·û¿´³öÀ´¡£Õâ°Ñ±äÁ¿µÄ»úÆ÷µØÖ· ´«µÝ¸øÁ˺¯Êý£¬Òò´Ëº¯Êý×Ô¼º¾ÍÄܸıä±äÁ¿µÄÖµ¡£Ò²¿ÉÒÔʹÓÃÈ«¾Ö±äÁ¿±àд³ÌÐò£¬µ«ÊÇÓ¦¸Ã ¾¡Á¿ÉÙʹÓÃÈ«¾Ö±äÁ¿¡£Ö¸ÕëÊÇCµÄÒ»¸öÖØÒª×é³É²¿·Ö£¬ÄãÓ¦¸Ã³ä·ÖµØÀí½âËü¡£
  2. ÎÒÃÇÔÚÒ»¸öÐ嵀 .c ÎļþÖÐʹÓú¯Êýµ÷ÓᣲÙ×÷ϵͳ×ÜÊÇѰÕÒÃûΪ'main'µÄº¯Êý£¬²¢´Ó ÄÇÀ↑ʼִÐС£ shuffle.c ÖÐûÓÐ'main'º¯Êý£¬Òò´Ë²»ÄܱàÒëΪ¶ÀÁ¢µÄ¿ÉÖ´ÐÐÎļþ¡£ ÎÒÃDZØÐë°ÑËüÓëÁíÒ»¸ö¾ßÓÐ'main'º¯Êý²¢µ÷ÓÃ'shuffle'µÄ³ÌÐò×éºÏÆðÀ´¡£

ÔËÐÐÃüÁî

gcc -c shuffle.c
²¢È·¶¨Ëü´´½¨ÁËÒ»¸öÃûΪ shuffle.o µÄÐÂÎļþ¡£±à¼­game.cÎļþ£¬ÔÚµÚ7ÐУ¬ÔÚ deck_tÀàÐ͵ıäÁ¿ deck ÉùÃ÷Ö®ºó£¬¼ÓÉÏÏÂÃæÕâÒ»ÐУº
shuffle(&deck);
ÏÖÔÚ£¬Èç¹ûÎÒÃÇ»¹ÏóÒÔǰһÑù´´½¨¿ÉÖ´ÐÐÎļþ£¬ÎÒÃǾͻáµÃµ½Ò»¸ö´íÎó
gcc -o game game.c

/tmp/ccmiHnJX.o: In function `main':
/tmp/ccmiHnJX.o(.text+0xf): undefined reference to `shuffle'
collect2: ld returned 1 exit status
±àÒë³É¹¦ÁË£¬ÒòΪÎÒÃǵÄÓï·¨ÊÇÕýÈ·µÄ¡£µ«ÊÇÁ¬½Ó²½Öèȴʧ°ÜÁË£¬ÒòΪ ÎÒÃÇûÓиæËß±àÒëÆ÷'shuffle'º¯ÊýÔÚÄÄÀï¡£ ÄÇô£¬µ½µ×ʲôÊÇÁ¬½Ó£¿ÎÒÃÇÔõÑù¸æËß±àÒëÆ÷µ½ÄÄÀïѰÕÒÕâ¸öº¯ÊýÄØ£¿

 

Á¬½Ó

Á¬½ÓÆ÷ld£¬Ê¹ÓÃÏÂÃæµÄÃüÁ½ÓÊÜÇ°ÃæÓÉ as ´´½¨µÄÄ¿±êÎļþ²¢°ÑËüת»»Îª¿ÉÖ´ÐÐÎļþ

gcc -o game game.o shuffle.o
Õ⽫°ÑÁ½¸öÄ¿±êÎļþ×éºÏÆðÀ´²¢´´½¨¿ÉÖ´ÐÐÎļþ game¡£

Á¬½ÓÆ÷´Óshuffle.oÄ¿±êÎļþÖÐÕÒµ½ shuffle º¯Êý£¬²¢°ÑËü°üÀ¨½ø¿ÉÖ´ÐÐÎļþ¡£ Ä¿±êÎļþµÄÕæÕýºÃ´¦ÔÚÓÚ£¬Èç¹ûÎÒÃÇÏëÔÙ´ÎʹÓÃÄǸöº¯Êý£¬ÎÒÃÇËùÒª×öµÄ¾ÍÊǰüº¬"deck.h" Îļþ²¢°Ñ shuffle.o Ä¿±êÎļþÁ¬½Óµ½ÐµĿÉÖ´ÐÐÎļþÖС£

ÏóÕâÑùµÄ´úÂëÖØÓÃÊǾ­³£·¢ÉúµÄ¡£ËäÈ»ÎÒÃDz¢Ã»ÓбàÐ´Ç°Ãæ×÷Ϊµ÷ÊÔÓï¾äµ÷ÓÃµÄ printf º¯Êý£¬Á¬½ÓÆ÷È´ÄÜ´ÓÎÒÃÇÓà #include <stdlib.h> Óï¾ä°üº¬µÄÎļþÖÐ ÕÒµ½ËüµÄÉùÃ÷£¬²¢°Ñ´æ´¢ÔÚC¿â£¨/lib/libc.so.6£©ÖеÄÄ¿±ê´úÂëÁ¬½Ó½øÀ´¡£ ÕâÖÖ·½Ê½Ê¹ÎÒÃÇ¿ÉÒÔʹÓÃÒÑÄÜÕýÈ·¹¤×÷µÄÆäËûÈ˵ĺ¯Êý£¬Ö»¹ØÐÄÎÒÃÇËùÒª½â¾öµÄÎÊÌâ¡£ Õâ¾ÍÊÇΪʲôͷÎļþÖÐÒ»°ãÖ»º¬ÓÐÊý¾ÝºÍº¯ÊýÉùÃ÷£¬¶øÃ»Óк¯ÊýÌå¡£Ò»°ã£¬Äã¿ÉÒÔΪ Á¬½ÓÆ÷´´½¨Ä¿±êÎļþ»òº¯Êý¿â£¬ÒÔ±ãÁ¬½Ó½ø¿ÉÖ´ÐÐÎļþ¡£ÎÒÃǵĴúÂë¿ÉÄܲúÉúÎÊÌ⣬ÒòΪ ÔÚÍ·ÎļþÖÐÎÒÃÇûÓзÅÈëÈκκ¯ÊýÉùÃ÷¡£ÎªÁËÈ·±£Ò»ÇÐ˳Àû£¬ÎÒÃÇ»¹ÄÜ×öÊ²Ã´ÄØ£¿

 

ÁíÍâÁ½¸öÖØÒªÑ¡Ïî

-Wall Ñ¡Ïî¿ÉÒÔ´ò¿ªËùÓÐÀàÐ͵ÄÓï·¨¾¯¸æ£¬ÒÔ±ã°ïÖúÎÒÃÇÈ·¶¨´úÂëÊÇÕýÈ·µÄ£¬ ²¢ÇÒ¾¡¿ÉÄÜʵÏÖ¿ÉÒÆÖ²ÐÔ¡£µ±ÎÒÃÇʹÓÃÕâ¸öÑ¡Ïî±àÒëÎÒÃǵĴúÂëʱ£¬ÎÒÃǽ«¿´µ½ÏÂÊö¾¯¸æ£º

game.c:9: warning: implicit declaration of function `shuffle'
ÕâÈÃÎÒÃÇÖªµÀ»¹ÓÐһЩ¹¤×÷Òª×ö¡£ÎÒÃÇÐèÒªÔÚÍ·ÎļþÖмÓÈëÒ»ÐдúÂ룬ÒÔ±ã¸æËß±àÒëÆ÷ÓÐ¹Ø shuffle º¯ÊýµÄÒ»ÇУ¬ÈÃËü¿ÉÒÔ×ö±ØÒªµÄ¼ì²é¡£ÌýÆðÀ´ÏóÊÇÒ»ÖֽƱ磬µ«ÕâÑù×ö ¿ÉÒ԰Ѻ¯ÊýµÄ¶¨ÒåÓëʵÏÖ·ÖÀ뿪À´£¬Ê¹ÎÒÃÇÄÜÔÚÈκεط½Ê¹ÓÃÎÒÃǵĺ¯Êý£¬Ö»Òª°üº¬ÐµÄÍ·Îļþ ²¢°ÑËüÁ¬½Óµ½ÎÒÃǵÄÄ¿±êÎļþÖоͿÉÒÔÁË¡£ÏÂÃæÎÒÃǾͰÑÕâÒ»ÐмÓÈëdeck.hÖС£
void shuffle(deck_t *pdeck);
Õâ¾Í¿ÉÒÔÏû³ýÄǸö¾¯¸æÐÅÏ¢ÁË¡£

ÁíÒ»¸ö³£ÓñàÒëÆ÷Ñ¡ÏîÊÇÓÅ»¯Ñ¡Ïî -O# (¼´ -O2)¡£ ÕâÊǸæËß±àÒëÆ÷ÄãÐèҪʲô¼¶±ðµÄÓÅ»¯¡£±àÒëÆ÷¾ßÓÐÒ»ÕûÌ×¼¼ÇÉ¿ÉÒÔʹÄãµÄ´úÂëÔËÐеøü¿ìÒ»µã¡£ ¶ÔÓÚÏóÎÒÃÇÕâÖÖС³ÌÐò£¬Äã¿ÉÄÜ×¢Òâ²»µ½²î±ð£¬µ«¶ÔÓÚ´óÐͳÌÐòÀ´Ëµ£¬Ëü¿ÉÒÔ´ó·ù¶ÈÌá¸ßÔËÐÐËÙ¶È¡£ Äã»á¾­³£Åöµ½Ëü£¬ËùÒÔÄãÓ¦¸ÃÖªµÀËüµÄÒâ˼¡£

 

µ÷ÊÔ

ÎÒÃǶ¼ÖªµÀ£¬´úÂëͨ¹ýÁ˱àÒë²¢²»Òâζ×ÅËü°´ÎÒÃǵÃÒªÇó¹¤×÷ÁË¡£Äã¿ÉÒÔʹÓÃÏÂÃæµÄÃüÁîÑéÖ¤ ÊÇ·ñËùÓеĺÅÂë¶¼±»Ê¹ÓÃÁË

game | sort - n | less
²¢ÇÒ¼ì²éÓÐûÓÐÒÅ©¡£Èç¹ûÓÐÎÊÌâÎÒÃǸÃÔõô°ì£¿ÎÒÃÇÈçºÎ²ÅÄÜÉîÈëµ×²ã²éÕÒ´íÎóÄØ£¿

Äã¿ÉÒÔʹÓõ÷ÊÔÆ÷¼ì²éÄãµÄ´úÂë¡£´ó¶àÊý·¢Ðа涼Ìá¹©ÖøÃûµÄµ÷ÊÔÆ÷£ºgdb¡£Èç¹ûÄÇЩÖÚ¶àµÄÃüÁîÐÐÑ¡Ïî ÈÃÄã¸Ðµ½ÎÞËùÊÊ´Ó£¬ÄÇôÄã¿ÉÒÔʹÓÃKDEÌṩµÄÒ»¸öºÜºÃµÄǰ¶Ë¹¤¾ß KDbg¡£ »¹ÓÐһЩÆäËüµÄǰ¶Ë¹¤¾ß£¬ËüÃǶ¼ºÜÏàËÆ¡£Òª¿ªÊ¼µ÷ÊÔ£¬Äã¿ÉÒÔÑ¡Ôñ File->Executable È»ºóÕÒµ½ÄãµÄ game ³ÌÐò¡£ µ±Äã°´ÏÂF5¼ü»òÑ¡Ôñ Execution->´Ó²Ëµ¥ÔËÐÐʱ£¬Äã¿ÉÒÔÔÚÁíÒ»¸ö´°¿ÚÖп´µ½Êä³ö¡£ Ôõô»ØÊ£¿ÔÚÄǸö´°¿ÚÖÐÎÒÃÇʲôҲ¿´²»µ½¡£²»Òªµ£ÐÄ£¬KDbgûÓгöÎÊÌâ¡£ÎÊÌâÔÚÓÚÎÒÃÇ ÔÚ¿ÉÖ´ÐÐÎļþÖÐûÓмÓÈëÈκε÷ÊÔÐÅÏ¢£¬ËùÒÔKDbg²»ÄܸæËßÎÒÃÇÄÚ²¿·¢ÉúÁËʲô¡£±àÒëÆ÷Ñ¡Ïî -g ¿ÉÒ԰ѱØÒªµÄµ÷ÊÔÐÅÏ¢¼ÓÈëÄ¿±êÎļþ¡£Äã±ØÐëÓÃÕâ¸öÑ¡Ïî±àÒëÄ¿±êÎļþ £¨À©Õ¹ÃûΪ.o£©£¬ËùÒÔÃüÁîÐгÉÁË£º
gcc -g -c shuffle.c game.c
gcc -g -o game game.o shuffle.o
Õâ¾Í°Ñ¹³×Ó·ÅÈëÁË¿ÉÖ´ÐÐÎļþ£¬Ê¹gdbºÍKDbgÄÜÖ¸³öÔËÐÐÇé¿ö¡£µ÷ÊÔÊÇÒ»ÖÖºÜÖØÒªµÄ¼¼Êõ£¬ºÜ ÖµµÃÄ㻨ʱ¼äѧϰÈçºÎʹÓᣵ÷ÊÔÆ÷°ïÖú³ÌÐòÔ±µÄ·½·¨ÊÇËüÄÜÔÚÔ´´úÂëÖÐÉèÖᰶϵ㡱¡£ÏÖÔÚÄã¿ÉÒÔ ÓÃÓÒ¼üµ¥»÷µ÷Óà shuffle º¯ÊýµÄÄÇÐдúÂ룬ÊÔ×ÅÉèÖöϵ㡣ÄÇÒ»ÐбßÉÏ»á³öÏÖÒ»¸ö ºìÉ«µÄСԲȦ¡£ÏÖÔÚµ±Äã°´ÏÂF5¼üʱ£¬³ÌÐò¾Í»áÔÚÄÇÒ»ÐÐÍ£Ö¹Ö´ÐС£°´F8¿ÉÒÔÌøÈëshuffleº¯Êý¡£ ºÇ£¬ÎÒÃÇÏÖÔÚ¿ÉÒÔ¿´µ½ shuffle.c ÖеĴúÂëÁË£¡ÎÒÃÇ¿ÉÒÔ¿ØÖƳÌÐòÒ»²½Ò»²½µØÖ´ÐУ¬ ²¢¿´µ½¾¿¾¹·¢ÉúÁËʲôÊ¡£Èç¹ûÄã°Ñ¹â±êÔÝÍ£ÔÚ¾Ö²¿±äÁ¿ÉÏ£¬Ä㽫ÄÜ¿´µ½±äÁ¿µÄÄÚÈÝ¡£ Ì«ºÃÁË¡£Õâ±ÈÄÇÌõ printf Óï¾äºÃ¶àÁË£¬ÊDz»ÊÇ£¿

 

С½á

±¾ÎÄ´óÌå½éÉÜÁ˱àÒëºÍµ÷ÊÔC³ÌÐòµÄ·½·¨¡£ÎÒÃÇÌÖÂÛÁ˱àÒëÆ÷×ß¹ýµÄ²½Ö裬ÒÔ¼°ÎªÁËÈà ±àÒëÆ÷×öÕâЩ¹¤×÷Ó¦¸Ã¸øgcc´«µÝÄÄЩѡÏî¡£ÎÒÃǼòÊöÁËÓйØÁ¬½Ó¹²Ïíº¯Êý¿âµÄÎÊÌ⣬ ×îºó½éÉÜÁ˵÷ÊÔÆ÷¡£ÕæÕýÁ˽âÄãËù´ÓÊµĹ¤×÷»¹ÐèÒª¸¶³öÐí¶àŬÁ¦£¬µ«ÎÒÏ£Íû±¾ÎÄ ÄÜÈÃÄãÕýÈ·µØÆð²½¡£Äã¿ÉÒÔÔÚ gcc¡¢ as ºÍ ldµÄ man ºÍ info pageÖÐ ÕÒµ½¸ü¶àµÄÐÅÏ¢¡£

×Ô¼º±àд´úÂë¿ÉÒÔÈÃÄãѧµ½¸ü¶àµÄ¶«Î÷¡£×÷ΪÁ·Ï°Äã¿ÉÒÔÒÔ±¾ÎĵÄֽůÓÎϷΪ»ù´¡£¬±àд Ò»¸ö21µãÓÎÏ·¡£ÄÇʱÄã¿ÉÒÔѧѧÈçºÎʹÓõ÷ÊÔÆ÷¡£Ê¹ÓÃGUIµÄKDbg¿ªÊ¼¿ÉÒÔ¸üÈÝÒ×һЩ¡£ Èç¹ûÄãÿ´ÎÖ»¼ÓÈëÒ»µãµã¹¦ÄÜ£¬ÄÇôºÜ¿ì¾ÍÄÜÍê³É¡£Çмǣ¬Ò»¶¨Òª±£³Ö³ÌÐòÒ»Ö±ÄÜÔËÐУ¡

ÒªÏë±àдһ¸öÍêÕûµÄÓÎÏ·£¬ÄãÐèÒªÏÂÃæÕâЩÄÚÈÝ£º

 

Õ¾µãÁ´½Ó

 

¶ÔÕâÆªÎÄÕ·¢±íÆÀÂÛ

ÿƪÎÄÕ¶¼Óи÷×Եķ´À¡Ò³Ãæ¡£ÔÚÕâ¸öÒ³ÃæÀÄú¿ÉÒÔÌá½»ÆÀÂÛ£¬Ò²¿ÉÒԲ鿴ÆäËû¶ÁÕߵįÀÂÛ£º
 ·´À¡Ò³Ãæ 

Ö÷Ò³ÓÉLinuxFocus±à¼­×éά»¤
© Lorne Bailey, FDL
LinuxFocus.org

µã»÷ÕâÀïÏòLinuxFocus±¨¸æ´íÎó»òÌá³öÒâ¼û
·­ÒëÐÅÏ¢:
en --> -- : Lorne Bailey <sherm_pbody(at)yahoo.com>
en --> zh: Zhang Wei <Dr_ZhangWei(at)hotmail.com>

2002-03-13, generated by lfparser version 2.27