|
|
| This document is available in: English Castellano ChineseGB Deutsch Francais Italiano Portugues Russian Turkce Arabic |
by Lorne Bailey <sherm_pbody(at)yahoo.com> ��������: Lorneס��֥�Ӹ磬����һ����������ѯ�ˣ������س��ǰ����ݵ��뵼��Oracle���ݿ⡣ �Դ�ת��������������������һֱʹ��*nix������Lorne��ȫ�ܿ��ˡ�DLL�������� �����ڹ�����������ѧ˶ʿѧλ�� Ŀ¼: |
ժҪ:
Ҫ���������ģ�����Ҫ��C�����л������˽⣬���Ľ���������ʹ��gcc��������
���ȣ����ǽ��������������з�ʽ��ʹ�ñ�����������CԴ���롣
Ȼ�������Ǽ�Ҫ����һ�±���������������Щ�������Լ����ο��Ʊ������̡�
����Ҳ��Ҫ�����˵�������ʹ�÷�����
��������ʹ�÷���Դ������˽�б�������������������������ô֪��������������
��ִ���ļ��м�����ʲô�����ܻ��������ֺ��ź�ľ����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 ������ԭ���ij���������֪�����ĸ�
������ a.out�����ǿ���ͨ��ʹ�� -o ����ѡ�����
gcc�������ѿ�ִ���ļ���ʲô���֡����ǽ��������������� game������
����ʹ���κ����֣���ΪCû��Java�������������ơ�
gcc -o game game.c
game Hello World
������Ϊֹ��������һ�����õij����ú�Զ�����������þ�ɥ����������һ������ �Ѿ����벢������һ����������Ϊ���ǽ�һ��һ��Ϊ�����������ӹ��ܣ��������DZ��� ��֤�����ܹ����С��ƺ�ÿ���տ�ʼѧ���̵ij���Ա����һ���ӱ�һ��1000�еij����� Ȼ��һ�������еĴ�����û���ˣ�����˵û���ˣ���������������Ӧ���ȱ�һ������ ���е�С������������Ȼ���ٴ��������С�������������һ���ĵĴ������������⣬ ��֪���ղ�������Щ��ʹ���������У�������֪��Ӧ�ð�ע����������������� ��ֹ�������������֣�����Ϊ����д�Ķ���Ӧ���ܹ���������Ҳ��ͨ�����룬�������� �������С����мǣ��ܹ�ͨ�������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 ѡ��ָ��
�����ļ����Ļ�����������������̨��Ԥ��������ͨ������������Ҫ�������˴����ܴ���
�����ԡ�
-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���䣬���Ǿ���ȷ
��֪�����ھ���������ʲô���Ա��ڿ�ʼ��һ��֮ǰ����֪�����Ѿ�ϴ���ˡ�������
�����Ĺ����е�����֮�������ǿ�����һ�������Ӵ�����ɾ�������ֵ��Գ����ļ���
�������ֲܴڣ�����ʹ�����ٵ����������˵����������Ժ������ٽ��ܸ����ӵĵ�������
shuffle.c ��û��'main'���������˲��ܱ���Ϊ�����Ŀ�ִ���ļ���
���DZ�����������һ������'main'����������'shuffle'�ij�������������
��������
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�����ķ��������������˱������߹��IJ��裬�Լ�Ϊ����
����������Щ����Ӧ�ø�gcc������Щѡ����Ǽ������й����ӹ��������������⣬
���������˵������������˽��������µĹ�������Ҫ��������Ŭ��������ϣ������
��������ȷ������������ gcc�� as �� ld�� man �� info page��
�ҵ���������Ϣ��
�Լ���д������������ѧ�������Ķ�������Ϊ��ϰ�������Ա��ĵ�ֽ����ϷΪ��������д һ��21����Ϸ����ʱ������ѧѧ����ʹ�õ�������ʹ��GUI��KDbg��ʼ���Ը�����һЩ�� ������ÿ��ֻ����һ���㹦�ܣ���ô�ܿ��������ɡ��мǣ�һ��Ҫ���ֳ���һֱ�����У�
Ҫ����дһ����������Ϸ������Ҫ������Щ���ݣ�
|
|
��ҳ��LinuxFocus�༭��ά��
© Lorne Bailey, FDL LinuxFocus.org ����������LinuxFocus������������������ |
������Ϣ:
|
2002-03-13, generated by lfparser version 2.27