[LinuxFocus-icon]
�����  |  �����  |  ������  |  �����

������� | ������ | ������ | ��� LF
��� ������� �������� ��: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Portugues  Russian  Turkce  Arabic  

[Lorne Bailey]
����� Lorne Bailey
<sherm_pbody(at)yahoo.com>

�� ������:

���� ����� � ������ � �������� ������������� �� �����������, ��������������� �� �����-������ ��� ��� ������ Oracle. ������ �����-�� ����� - ��������������� ������������� � ����� *nix - ���� ��������� ������� '��� DLL'. ������ �� �������� ��� ����� ������ �������� �� �����������.



������� �� �������:
������� ������� <forlelik(at)yahoo.com>

����������:

 

GCC - ������ �����

[Illustration]

������:

��� ������ ������������, ��� �� ������� � �������� ����� ��, � ����� ����������� ��� � �������������� gcc � �������� �����������. �� ����� ���� ����������, ��� �� ������� ������� ���������� �� ��������� ������ ��� �������� ���� �� ��. ����� �� ������� ������� ����� ����, ��� �� �� ����� ���� ����������, � ����, ��� �� ������ �������������� ���������� ����� ��������. ����� �� ����� ������ ���������� ������������� ���������.



 

������� GCC

������ �� �� ����������� ���������� ���������� ������������ ����������� ������������ � ��������� ������, ����������� � ����-���� �������������? ������ �� ������ �����, ��� ���������� � ����� ����������� �����? ����� ����� �������������� ������ ���� ��� ������ ������. Ken Thompson, ��� ����� �� ���������� ������� ���� ������, ������� ����������, ������� �������� ������ ��� � ��������� 'login' � ���������� ������, ����� ����������, ����������� ���, ������������ ��� ����. �������� �������� ���� ������ �������� �����: . � �������, � ��� ���� gcc. ��� ������ �� ���������� configure; make; make install , gcc ��������� �� ������ ����� ������� ������. ��� ��� ��������� gcc �������� �� ����? �� ������ ������ ��������� ����, �� ������� ���� �������, ������� ��� ����������� ��� ������������ ���������������� �����������. ��������� �� �������� � ������� �����, ��� ����������� ��������� �������� ���������� ��� ����, ����� �����, ��� ����� ������� ��� �������� ������������ ����� � � ����� �������. �� ������� ����� ����� ����, ��� ������������� ��������� �� ��, � ����� �����, ������� ���������� gcc ������ ��, ��� ��� �����. ������� (� ������������ �� ������������� ��������) �������������(Pre-compile) (gcc -E), ����������(Compile) (gcc), ���������������(Assembly) (as), and ����������(Link) (ld).

 

� ������...

��-������,������, �� ������ �����, ��� ������� ���������� � ������ ���. ��� ������������� ������. �� ������ � ������ ������������ ������ ��������� �� ��. (������� ������ ���� ��������).

#include <stdio.h>

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

��������� ���� ���� � ������ game.c. �� ������ �������������� ��� �� ��������� ������, ��������:

gcc game.c
�� ���������, ���������� �� ������� ����������� ���� � ��������� a.out. �� ������ ��������� ���, ������:
 a.out
Hello World

������, ����� �� ������������ ���������, ����� a.out ����� �������� ���������� ���������. �� �� ������ �������, ����� �� �������� ������� ������� a.out. �� ����� ������ ��� ��������, ������� gcc, ��� �� ����� ������� ����������� ����, � ������� ����� -o . �� ����� ������� ��� ��������� game, ���� �� ����� �� ������� �� ��� ������, ��������� �� �� ����� ����������� �� �����, ������� ���� Java.
 gcc -o game game.c 
game
Hello World

� ���� ����� �� ��� ����� ������ �� ��������� �������� ���������. ���� �� �������, ��� ��� �����, �� ������ ������� �� �������� ����, ��� � ��� ���� ���������, ������� ������������� � ��������. ��� ������ �� ����-������ ������ ��������� ��������� ����������������, �� ������� ��������� � ���, ��� ��������� �������� ���������������. ��������, ��� ������ ���������� ����������� ����� �������� 1,000 ����� ��������� ����, � ����� ����� �� ���������. � �����, ��� ����� ����� �� ������. �� �������� ��������� ���������� ���������, �� ��������� �� � ����� ����������� �� ��������. ��� ��������� ���������� ������, ������� ��� ����� ����� ��������� �� ���� ���. ���� � ����, �� ����� ������, ��� �� ������� � ��� �� ��������, ��� ��� �� ������, �� ��� ���������������. ��� ������� ��� �� �������� ����-��, ���, �� ������ ������ ������ ��������, � �������� ���� �������������, �� ������� �� ������ ����������� ������. ������� - ��, ��� ��������� �������������, ����� �� ��������, ��� ��� �����.

��������� ��� - �������� ������������� ����� ��� ����� ����. ������������ ���� �������� � ����� ����� ���� ������ � �������� �������. ��� ������������ ������������� ����������� �������� ������, ��� ��� ������ ����� ����� ��������� ������������ ���-���� ���������.

 #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, �� ������ �������� ��� game.c. � ������ 2 ����� game.c, �������� #include "deck.h". � ������ 5, �������� deck_t deck; ����� ���������, ��� �� ������ �� �������, ������������� ��� �����.

 gcc -o game game.c

��� ������ - ��� �������. ���� �� �� �������������, ����������� � ���, ���� �� �� ����������.

 

�������������(Pre-compile)

������ ���������� �����, ������ ���� 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 
����� 3,200 ����� ������! ����������� �� ��� ���������� �� ������������� ����� stdio.h, �� ���� �� ���������� �� ���, �� ������� ����� � ���� ��������. ���� �� �� ������ ��� ��������� ����� ����� ���� -o, �� ����� ������� �� �������. ������������� ���� ���� ������� ��������, �������� ��� ������� ����.
  1. �������� "����������(#include)" ����� � ������������� �������� ����.
  2. �������� "������������(#define)" ����� ��������������� ����������.
  3. �������� ������� � �������, � ������� ��� ����������.
��� ��������� ��� ����� ����������� ��������� (��������, DECKSIZE, �������������� ���������� ���� � ������), ������� ������������ �������� ������� �� ���� ����, ����������� � ����� ����� � ������������� ���������� �����, ��� ������ �������� ��������. �� ��������, �� ����� ������� �� �������������� ������ -E ����� �� ����, � ������ ����� ���������� ��� ����� � �����������.

 

���������� (Compile)

� �������� �������������� ����, gcc ����������� ��� ��� � ���� ����������. ����� ������� ���, �� ������ �����������, ��� �� ����� � ����, �������� ��� ���. ���� �� ������� �������������� ������, �� ������� ��� �� ���� � ���������� ���������. ���� ������ �������� ������, ��� ��� ������������ ��� ����� ��������. ������ ��� gcc �������� ��� ����� ����� ������.

 

���������������(Assembly)

as ��������� ��� �� ���������� � ��������� ���. ��������� ��� �� ����� ������� �������� � ����������, �� �� ����� ������ � �����. ����� ����������� -c ���������� ���� .c � ��������� ���� � ����������� .o. ���� �� ���������

 gcc -c game.c 
, �� ������������� ������� ���� � ������ game.o.����� �� ����������� �� ������ �����. �� ����� ����� ����� ���� .c � ������� �� ���� ��������� ����. ��� �� ������ ����, �� ����� ������������� ��� ��������� ����� � ����������� ���� �� ����� ����������. ������� �������� � ������ �������. ��������� �� ������������� ��������� ���� � ���������� ������ ���� ��� deck_t, ��� ����� �������� �������, ������� ������ ������. ��� ������� �������� ��������� �� ��� ������ � ��������� ��� ���������� ���������� ��� ����. ��� ������ �� �������, ������� ��� ��������������, � ������� ������� '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. �� ��������� ���������� ���� � ���� ���, ����� ��� ������� �� ������� ������������ ������ ����. ��� �� ������� ����� ��������� ����������������, �� ������ �����, ����� �� ������, ��� ����������. ��������� �� ������ �������� ���� ����, � ��� ��� ������� ������� ���������, ��� ���� ������� ������ ��, ��� �� �����. � ������� printf, �� ����� ����� �������, ��� ���������� ����� ������, ��� ���, ����� �� �������� � ����� ��������� ����, �� ����� �����, ��� ������ ������ ������������. ����� ����, ��� �� ��������, ��� ��� �������� ���������, �� ������ ��� ������� �� ������ ����. ��� ������� ������� �������� �������� ������, �� ��� ������ ��� � ��������� �����. �� ������� ����� ������� ��������� �����.

�������� ��� ����.
  1. �� �������� �������� �� ��� ������, ������� �� ������ �������� � ������� ��������� '&' (�����). �� �������� �������� ����� ���������� � �������, ��� ��� ������� ���� ����� �������� ����������. ��� �������� � ���������� � ����������� �����������, �� ��� ������ �������������� ���� � ����� ������ �������. ��������� �������� ������ ������ �� � �� ������ ������ �������� ��.
  2. �� ���������� ����� ������� �� ������ ����� .c. ������������ ������� ������ ���� �������, ���������� 'main' � �������� ���������� � ���. shuffle.c �� �������� ������� 'main' � ������� �� ����� ���� ��������������� ����������� ������. �� ������ ������������� ��� � ������ ����������, ������� �������� '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'. ��� ����� link � ��� ��� ������� �����������, ��� ����� ��� �������?

 

����������(Link)

�����������, ld, ����� ��������� ���, ��������� ����� as � ���������� ��� � ����������� ��������

 gcc -o game game.o shuffle.o
��� ������������ ��� ������� ������ � ������� ����������� ���� game.

����������� ������� ������� shuffle � ��������� ���� shuffle.o � �������� �� � ����������� ����. ��������� �������� ��������� ������ � ���, ��� ���� ��� ����� ������������ ��� ������� �����, �� ���, ��� ��� ����������� - ��� ���������� ���� "deck.h" � ������� ��������� ���� shuffle.o � ����� ����������� ������.

��������� ������������� ����, ��� ���� ������, ������������� ����. ���� �� �� ������ ������� printf, ������� �� �������� ���� � ���������� �����������, ����������� ����� �� ����������� � �����, ������� �� �������� � ������� #include <stdlib.h> � ������ � ��������� �����, ���������� � ���������� �� (/lib/libc.so.6). ���� ������ �� ����� ������������ ��� ������, ���� ��������� ��� ������� �������� ��������� � ��������� � ������� ����� �������. ��� �������� ��������, ������ ������������ ����� ������ �������� ������ ����������� ������ � �������, � �� ���� �������. ������ �� �������� ��������� ����� ��� ���������� ��� ������������, ����� ��������� �� � ����������� ����. � ����� ����� ����� ���������� ��������, ��������� �� �� ��������� ����������� ������� � ��� ������������ ����. ��� �� ����� �������, ����� ���������, ��� ��� ������� ������?

 

��� ����� ������ �����

����� -Wall ���������� ��� ���� �������������� �������������� �����, ����� ������ ��� ��������������, ��� ��� ��� ���������� � ����������� �����������. ����� �� ���������� ��� ����� � ����������� ��� ���, �� ����� ���-�� �����:

 game.c:9: warning:
implicit declaration of function `shuffle' 
��� �������� ���, ��� � ��� ���� ��� ������� ������. ��� ����� ��������� � ������������ ���� ������, � ������� �� ������� ����������� ��� � ����� ������� shuffle, ����� �� ��� ��������� ���, ��� ��� �����. ��� ������, ��� �����������, �� ��������� ����������� �� ���������� � ��������� ��� ������������ ���� ������� ����� ������� ���������� ������ ������������� ����� � �������������� ������ ���������� ����. �� ������ ��������� ���� ������ � ���� deck.h.
 void shuffle(deck_t
*pdeck); 
��� ������� ��� �� ���������������� ���������.

��� ����� ����� ������ ����������� �������� ����������� -O# (��������, -O2). ��� �������� �����������, ����� ������� ����������� ��� �����. � ����������� ������ ����� "��������", ����� ������� ��� ��� ������������� ����-���� �������. ��� ��������� ��������, ��� ����, �� ������ �� �������� �������, �� ��� ������� �������� ����� �������� �������� ���������. �� ������� ��� ����� �����, ��� ��� �� ������ �����, ��� ��� ��������.

 

�������(Debugging)

��� ��� ���� ��������, ��, ��� ��� ��� �������������, ����� �� ��������, ��� �� �������� ���, ��� �� ����� �����. �� ������ ���������, ��� ��� ����� ������������ ������ ���� ���, ��������

 game | sort - n | less 
� ����������, ��� ������ �� �������. ��� ��� ����� �������, ���� ����� ��������� ��������? ��� �� ����� ���������� ��� ������ � ����� ������?

�� ������ ��������� ��� ��� � ������� ���������. ����������� ������������� ���������� ������������ �������� - gdb. ���� ����� ��������� ������ ��������� ���, ��� � ����, KDE ���������� ����� ������� ���������� KDbg. ���������� � ������ ����������, � ��� ����� �������. ��� ������� �������, �� ��������� File->Executable, � ����� �������� ���� ��������� game. ����� �� ��������� F5 ��� ��������� Execution->Run �� ����, �� ������ ������� ����� � ��������� ����. ��� ����������? �� ������ �� ����� � ����. �� ����������, KDbg �� ��������. �������� ������� � ���, ��� �� �� ��������� � ����������� ���� ���������� ����������, ��� ��� KDbg �� ����� ������� ���, ��� ���������� ������. ���� ����������� -g �������� ����������� ���������� � ��������� �����. �� ������ ������������� ��������� �����(���������� .o) � ���� ������, ��� ��� ������� ������ �����
gcc -g -c shuffle.c game.c
gcc -g -o game game.o shuffle.o
��� �������� � ����������� ���� �����, ������� ��������� gdb � KDbg ��������, ��� �� ����������. ������� �������� ������ �������, � ����� ������� ��������� ���� �����, ����� ��������� �������� � ����������. ��������, ������� �������� �������� ������������, �������� ����������� ��������� "����� ��������" 'Breakpoint' � �������� ����. ���������� ��������� �� ������ �������� ������ ������ �� ������ � ������� ������� shuffle. �� ���� ������ ������ ��������� ��������� ������� ������. ������, ����� �� ������� F5, ��������� ��������� ���������� �� ���� ������. ������� F8, ����� ����� � ������� shuffle. ���, ������ �� ������� �� ��� �� shuffle.c! �� ����� �������������� ���������� ��� �� ����� � ������, ��� � ���������������� ����������. ���� �� �������� ������� �� ��������� ����������, �� �������, ��� � ��� ��������. �������. ��� ������� �����, ��� ��������� � printf, �� ��� ��?

 

����������

��� ������ ������������ ������ ��� �� ���������� � ������� �������� ��. �� �������� ����, ������� ��������� ���������� � �����, ������� ��� ����� �������� ��� �� ����������. �� ��������� ���������� ����������� ��������� � ��������� ��������� � ���������. ��������� ����� �����, ����� ������������� ������, ��� �� �������, �� � �������, ��� ��� ��������, ����� �� ������ � ��� ����. �� ������ ����� ������ ���������� � ��������� man � info ��� gcc, as � ld.

��������������� ��������� ���� ������ ��� ����� �����. ��� ��������, �� ������ ����� ����� ������ ��������� ��������� ���� �� ���� ������ � �������� ���� "� ����". ��������� �����, ����� �������, ��� ������������ ����������. ������� ����� ������ � ��������� � ����������� �����������, ��� KDbg. ���� �� ����� �������� ������� ����������������, ��� ����� �������, ������ ��� �� ������� ���. �������, ��������� ������ ���������� ����������!

����� ��������� ��������� ����, ������� ����� ��� ������������ ��� �������� ������ ����.

 

������

 

�������� �������

� ������ ������� ���� �������� �������. �� ���� �������� �� ������ �������� ���� ����������� ��� ����������� ����������� ������ ���������.
 talkback page 

Webpages maintained by the LinuxFocus Editor team
© Lorne Bailey, FDL
LinuxFocus.org

Click here to report a fault or send a comment to LinuxFocus
Translation information:
en --> -- : Lorne Bailey <sherm_pbody(at)yahoo.com>
en --> ru: ������� ������� <forlelik(at)yahoo.com>

2002-02-26, generated by lfparser version 2.19