2017-02-02 54 views
0

[Изменить: вопрос неверен, файл, который я назвал «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. 
+0

Я только что попробовал ваш код, и он хорошо подходит для меня с помощью родового ARM Cortex M0. Вы уверены, что 'test.c' добавлен в ваш проект и скомпилирован? –

+0

Спасибо Гийом. Ошибка была где-то в другом месте, мой вопрос неверен, main.c на самом деле main.cpp, поэтому функция должна была быть объявлена ​​extern «C» ... Извинения и спасибо за вашу помощь! – user1532080

+0

Возможная дубликация [Что такое неопределенная ссылка/неразрешенная ошибка внешнего символа и как ее исправить?] (Http://stackoverflow.com/questions/12573816/what-is-an-undefined-reference-unresolved-external- символ ошибки и, как-делать-я-фикс) –

ответ

1

Проблемный вопрос, это было на самом деле случаем смешения C/C++, в этом случае вы получите символ отсутствует, если вы вызываете функцию C из C++ без объявления it extern C.