Почему эта ссылка на тестовый код NetBeans не будет правильно? - PullRequest
1 голос
/ 27 ноября 2011

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.

Ответы [ 3 ]

3 голосов
/ 27 ноября 2011

Вы связываете a.o с b.o?Скорее всего, нет.

1 голос
/ 27 ноября 2011

Что-то вызывает _InitalizeTestData (обратите внимание на подчеркивание), но вы, вероятно, не определите это ни в одном файле.Не могли бы вы где-нибудь по ошибке поставить подчеркивание, забыть реализовать это?

1 голос
/ 27 ноября 2011

Ошибка от компоновщика, и это означает, что ссылка на функцию InitializeTestData в b.o не устранена.

Причина в том, что вам не нравится a.o (который содержит определение) с b.o.

Вам нужно сделать:

# this will compile both the .c files and also link the resultant .o
gcc -o output a.c b.c

или

gcc -c a.c                 # get a.o
gcc -c b.c                 # get b.o
gcc -o output a.o b.o      # link them
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...