header.h
объявляет прототип функции void InitializeTestData();
a.c
заявляет об этом void InitializeTestData() { ... }
b.c
называет это InitializeTestData();
и компоновщик GCC сообщает b.c:108: undefined reference to '_InitializeTestData'
Должно быть, я упускаю из виду нечто очевидное, но что?
header.h
имеет защиту для включения (и ее #define
используется только в этом файле).
Нет никаких других задействованных директив препроцессора ... нет #if
, обернутых вокруг прототипа или объявления.
Если мне не нужно публиковать весь проект, кто-нибудь может предложить что-то, что заставит меня сказать d'oh!
?
Обновление: Netbeans обрабатывает его и не имеет проблем с дюжиной других файлов с внешними функциями и данными.
Ответ : a.c
на самом деле был тестовым файлом NetBeans. NetBeans обрабатывает их не так, как другие файлы, поскольку каждый из них должен иметь amain()
. Это означает, что у каждого из них есть свой собственный Makefile, и b.o
не связывался с a.o
в этом файле. Решение, переместите объявление в файл c.c
, который не является тестовым файлом Netbeans.