C プログラミング言語についての初心者の質問があります。同様の質問で答えを見つけるために周りを見回しましたが、わかりませんでした。
src と test の 2 つのディレクトリから構成される単純なプロジェクトを想定します。ソース ファイルとヘッダー ファイルは、src/main.c、test/foo.h、および test/foo.c によって定義されます。
ソース/main.c:
#include "../test/foo.h"
int main (void) {
int a = VAR; /* works, recognizes declared macro */
some_function(a); /* doesn't work, "undefined reference" */
}
テスト/foo.h:
#ifndef FOO_H
#define FOO_H
void some_function(int a);
#define VAR 2;
#endif
test/foo.c (冗長ですが完全にする必要があります):
#include "foo.h"
#include <stdlib.h>
void some_function(int a) {
printf("%d", ++a);
}
私はEclipseでプロジェクトを作成し、それでコンパイルしました.マクロは認識されますが、メソッドは呼び出せないため、リンクエラーではないと考えました.
私が別のディレクトリを使用している理由は、多くのファイルがあり、テスト コードをメイン ソース コードから分離したいからです。src と test の親ディレクトリは同じであることに注意してください。
ここで何が起こっているのですか?非常に明白な何かが欠けていますか?
どんな助けでも大歓迎です、事前に感謝します!
編集: (Debian) Linux マシンで作業しており、Eclipse は gcc コンパイラを使用しています。
edit2: H2CO3 の回答のおかげで、実際にリンク エラーであることがわかりました。毎回手動でコンパイルとリンクを行うのはかなりのオーバーヘッドになるため、Eclipse に別のディレクトリから実行可能ファイルをリンクするように教える方法を知っている人がいるかどうか疑問に思っていました。
- - - - - - - - - - - 解決 - - - - - - - - - - -
edit3: 解決策は非常に簡単でした。「新しいフォルダー」ではなく、「新しいソース フォルダー」を作成するだけでした。私はばかげているように感じますが、返信してくれてありがとう、特にH2CO3!