2012-01-14 14 views
2

私はCプロジェクトでいくつかの汎用コンテナを実装していて、コンパイル時にこの奇妙な問題を抱えています。エラーを複製するサンプルコードもあります。シンボルがCでコンパイルされていません。基本ヘッダファイルの設定

がfoo.h

void fooprint(void); 

foo.cの

#include "foo.h" 
#include <stdio> 
void fooprint(void){ 
    printf("bar"); 
    return; 
} 

main.cの

#include "foo.h" 

int main(void){ 
    fooprint(); 
    return 0; 
} 

私は

gcc main.c -o main 
を入力してコンパイル

、これは私はOSXシステム上でこれをコンパイルしていますが、また同じ効果とRed Hatのマシン上でコンパイルしようとしているの端子出力

Undefined symbols: 
"_fooprint", referenced from: 
    _main in ccfMXGzj.o 
ld: symbol(s) not found 
collect2: ld returned 1 exit status 

ものです。

解決策はおそらく痛いほど明白ですが、私はこれを見て作業している複数の友達がいて、問題を見ることができませんでした。私はたくさんの周りGoogleで検索しましたが、ほとんどのシンボルエラーの問題は通常、あなたはそれらを一緒にコンパイルする必要が客観C.

答えて

1

に関係している:

gcc -Wall -Wextra -o main main.c foo.c 

それとも、Makefileを作りますか?

all: main 

main: main.o foo.o 

main.o: main.c 

foo.o: foo.c 
+0

オハイオ州私のゴシック私はそれを逃したとは思わない。ありがとう – Mike

1

あなたは、オブジェクトファイルにもfoo.cをコンパイルし、それらのすべてをリンクする必要があります。

gcc -o foo.o foo.c 
gcc -o main.o main.c 
gcc -o main main.o foo.o 

はい、これは簡単ですので、私はあなたが良いCの本を読んで、これらのステップをお勧めします簡単なステップ。

関連する問題