2014-02-25 65 views
1

我是c编程语言的新手。我在centos linux系统下的同一目录中有以下文件。如何在c编程中编译和链接文件?

  • game.c

    game.h

    的main.c

game.h

#ifndef GAME_ 
#define GAME_ 

extern void game (void); 

#endif 

游戏.C

#include "game.h" 

void game (void) 
{ 
    return 23; 
} 

的main.c

#include "game.h" 

int main (void) 
{ 
    game(); 
} 

当我编译使用下面的命令..

gcc main.c 

我得到如下错误消息..

/tmp/ccwIlBKt.o:在功能main': main.c:(.text+0x7): undefined reference to游戏” collect2:LD返回1个退出状态

什么是链接到我的头文件的正确方法是什么?

+1

你也需要编译game.c ...(而不是单独调用,因为那你必须自己指定链接的东西) – deviantfan

+1

gcc -c game.c; gcc main.c -o app game.o – someuser

+0

http://www.lurklurk.org/linkers/linkers.html – someuser

回答

6

您需要编译并链接这两个程序。这样

gcc -c game.c 

gcc -c main.c 

首先编译和创建对象的文件,则可以生成可执行文件,这样

gcc game.o main.o -o myexe 

您可以使用这样

gcc game.o main.o -o myexe -lsocket -wall 

这里包括库文件lsocket是socket库,使用-wall会在l时显示任何警告墨代码

+1

一直以来都建议使用-Wall命令,以便在编译时会发现任何警告。 'gcc -Wall game.c main.c'或'gcc -Wall * .c' – crashh

+1

@crashh是总是推荐。请注意我的编辑 –

0
gcc game.c main.c 

gcc *.c 

您需要编译game.c,在功能game()模式,即(内main.c)的主要功能是指。

另外你不应该从void函数返回一个值。只需将身体留空即可,或者如果您确实想要返回声明,只需输入return;即可。即

void game(void) 
{ 
    return; 
} 

否则,如果你想返回一个值,改变函数的声明是:

<type-to-return> game(void) 
{ 
    return /* value */; 
} 
0

你应该纠正你的代码是:

game.c

#include "game.h" 
int game (void) 
{ 
    return 23; 
} 

main.c

#include "game.h" 
int main (void) 
{ 
    game(); 
    return 0; 
} 

你game.c需要有正确的返回类型(INT,而不是无效),完成后通知该程序正确结束你的主要方法应该总是返回0。第二版由Brian W. Kernighan的
ISBN-13

C语言程序设计,:978-0131103627

我也可以学习C(也有利于有经验的程序员参考)时,强烈推荐这本书