※ ChatGPTを利用し、要約された質問です(原文:linuxにおけるCの自作ヘッダファイル)
LinuxでC言語の自作ヘッダファイルの使い方を学びたい
このQ&Aのポイント
LinuxでC言語の自作ヘッダファイルを使う方法について学びたいです。
現在、C言語の勉強をしていて、自作ヘッダファイルの作成に挑戦しました。
しかし、エラーが発生してうまく動作しないため、どこが間違っているのかわかりません。教えてください。
現在C言語のしっかりと学ばなかった部分を学習したいと思い、自作ヘッダファイルの作成を勉強しています。
そこで、書籍のその章を一通り読んだあと、自分で簡単なものを作成してみましたが、エラーが出てうまくいきません。
どうしてかわかる方いたら教えてください。
コード
*****main.c*****
#include "print.h"
int main(void)
{
print();
return 0;
}
*****print.c*****
#include <stdio.h>
void print(void)
{
printf("test\n");
}
*****print.h*****
extern void print(void);
エラー
/tmp/ccH551c1.o: In function `main':
/home/ユーザ名/Documents/StudyC/main.c:5: undefined reference to `print'
collect2: ld returned 1 exit status
CentOS6.6にて端末上での実行です。
自分の解釈では、""でincludeすることでカレントディレクトリから目的のヘッダファイルを見つけ出してインクルードする、また、ヘッダファイル内でexternすることによってprint.cから目的の関数を定義しているので、main.cでは問題なく使えると思っています。
しかし、エラーではprint()が定義されていないと出るのでまったくわかりません・・・。
お礼
回答ありがとうございました。 最初、回答を見てしばらく悩みましたが理解できました。 コンパイルの際、ずっとgcc -g -Wall -omain main.cと、main.cだけをコンパイル(とリンク)していたのが原因だったんですね。 まずオブジェクトファイルを作ってと、分割コンパイルに関する知識が薄かったです。