如何在c编程中编译和链接文件?

时间:2014-02-25 10:44:13

标签: c linux

我是c编程语言的新手。我在centos linux系统下的同一目录下有以下文件。

  • game.c

    game.h

    的main.c

game.h

#ifndef GAME_
#define GAME_

extern void game (void);

#endif

game.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退出状态

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

3 个答案:

答案 0 :(得分: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是套接字库,并且在链接代码时使用-wall显示是否有任何警告

答案 1 :(得分:0)

gcc game.c main.c

gcc *.c

您需要编译实现函数game.c的{​​{1}},即您的主函数(在game()内)所指的。

此外,您不应该从void函数返回值。只需将主体留空,或者如果您确实需要返回语句,只需键入main.c即可。即。

return;

否则,如果要返回值,请将函数的声明更改为:

void game(void)
{
   return;
}

答案 2 :(得分: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而不是void),并且你的main方法在完成时应该总是返回0,以告知程序正确结束。

在学习C时我也强烈推荐这本书(也适合有经验的程序员参考):

C编程语言,第2版,作者:Brian W. Kernighan ISBN-13:978-0131103627