У меня есть вопрос новичков о языке программирования 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
тест/foo.c (резервный, но быть полным):
#include "foo.h"
#include <stdlib.h>
void some_function(int a) {
printf("%d", ++a);
}
Я создал проект в Eclipse, и я также скомпилировал его, я понял, что это не ошибка связи, поскольку макрос распознается, но метод не может быть вызван ,
Причина, по которой я использую разные каталоги, состоит в том, что у меня много файлов, и мой тестовый код будет отделен от моего основного исходного кода. Обратите внимание, что src и test имеют один и тот же родительский каталог.
Любые идеи, что здесь происходит? Я пропустил что-то очень очевидное?
Любая помощь будет высоко оценена, спасибо заранее!
Редактировать: Я работаю над машиной Linux (Debian) и Eclipse использует компилятор gcc.
edit2: Благодаря ответу H2CO3 я узнал, что это действительно ошибка связи. Поскольку компиляция и привязка вручную каждый раз довольно накладные расходы, мне было интересно, если кто-нибудь знает, как научить Eclipse связывать исполняемые файлы из разных каталогов?
--------------------- РЕШЕНИЕ ---------------------
edit3: Lol решение было очень легким, все, что мне нужно было сделать, это создать «новую исходную папку», а не «новую папку». Я чувствую себя глупо, но благодаря всем вам за ответ, H2CO3 в частности!
Попробуйте включить фактический исходный файл из 'main.c' =>' #include "../test/foo.c " – Cyclonecode
@KristerAndersson *** NO NO NO NO NO NOOOOOOO *** –
@ H2CO3 - Не так ли? – Cyclonecode