我有一个关于 C 编程语言的新手问题。我环顾四周寻找类似问题的答案,但我没有弄清楚。
假设一个简单的项目由两个目录组成:src 和 test。源文件和头文件由 src/main.c、test/foo.h 和 test/foo.c 定义。
src/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!