2014-02-25 63 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(也有利於有經驗的程序員參考)時,強烈推薦這本書