[Изменить: вопрос неверен, файл, который я назвал «main.c», был на самом деле «main.cpp», и поэтому у меня возникла проблема, вызвав C функция из файла C++. Таким образом, вопрос неверен и не имеет ответа, но если у вас есть эта неопределенная проблема с символом, подумайте также о том, что вы не смешиваете C & C++.]Ошибка: L6218E: Неопределенный символ три()
Я использую uVision 5 для разработки прошивки , однако я не могу заставить компоновщика найти одну из моих функций.
main.c:
#include "Test.h"
int main()
{
return three();
}
test.h:
#ifndef TEST_H
#define TEST_H
int three();
#endif
test.c
#include "Test.h"
int three()
{
return 3;
}
Все эти файлы находятся в корневом каталоге моего проекта, я знаю, что они get compiled, как если бы я ввел в них синтаксическую ошибку, компилятор сообщает об ошибке. Кроме того, глядя на файл карты производства, я вижу, что три() была удалена:
Removing test.o(i.three), (4 bytes).
Для целей тестирования, я имел --no_remove для компоновщика командной строки, файл карты теперь содержит:
0x0002ba76 0x00000004 Code RO 1 i.three test.o
Очевидно, что компоновщик хорошо знает мою функцию и будет или не удалит ее в зависимости от флагов.
Несмотря на это, он сообщает:
.\build\uvision5\test.axf: Error: L6218E: Undefined symbol three() (referred from main.o).
Not enough information to list image symbols.
Я только что попробовал ваш код, и он хорошо подходит для меня с помощью родового ARM Cortex M0. Вы уверены, что 'test.c' добавлен в ваш проект и скомпилирован? –
Спасибо Гийом. Ошибка была где-то в другом месте, мой вопрос неверен, main.c на самом деле main.cpp, поэтому функция должна была быть объявлена extern «C» ... Извинения и спасибо за вашу помощь! – user1532080
Возможная дубликация [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- символ ошибки и, как-делать-я-фикс) –