Проблема с связыванием: неопределенная ссылка на функцию, определенную в пользовательском заголовкеC++

Программы на C++. Форум разработчиков
Anonymous
Проблема с связыванием: неопределенная ссылка на функцию, определенную в пользовательском заголовке

Сообщение Anonymous »

В настоящее время я столкнулся с проблемой связывания при попытке изменить код запуска (startup.c) для моего проекта MCU, специально предназначенного для SAMD51. Моя цель — ввести флаг сборки, который позволит программировать устройство с пользовательскими настройками.
Вот фрагмент того, что я реализовал в своем SystemInit:

Код: Выделить всё

#if defined(__SAMD51__)
#ifdef USE_CUSTOM_INIT
custom_init();      // This function is declared in config.h and adjusts MCU clock frequency
#else
// Other initialization code...
#endif
Я создал файл config.h в своем проекте Visual Studio Code (VSC), содержащий функцию custom_init(), которая регулирует тактовую частоту . Хотя этот подход не идеален, он был необходим для интеграции редактируемой функции custom_init(). Однако при попытке сборки я обнаружил неопределенную ошибку ссылки для clock_init(), функции, которую я пытаюсь повторно использовать в custom_init():

Код: Выделить всё

void custom_init(){
clock_init();
// Additional initialization...
}
Вот фрагмент файла clock.hpp, где объявлена ​​функция clock_init():

Код: Выделить всё

#include 

void clock_init();
И реализация в clock.cpp:

Код: Выделить всё

#include "clock.hpp"

// definitions...

void clock_init() {
// Initialization code...
}
Во время процесса сборки я получаю сообщение об ошибке:

Код: Выделить всё

c:/users/pr2/.platformio/packages/toolchain-gccarmnoneeabi/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/bin/ld.exe: .pio\build\SAME51J20A\libFrameworkArduino.a(startup.c.o): in function `custom_init':
C:\GIT\same51_curiosity_nano_board/src/config.hpp:6: undefined reference to `clock_init'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\SAME51J20A\firmware.elf] Error 1
Я подозреваю, что между фреймворком и моим проектом может быть барьер, препятствующий правильному связыванию. Я пробовал объявить clock_init() с помощью __attribute__((weak)), а также использовать extern и статический встроенный, но ни один из этих подходов не разрешил ошибку.
Будем очень признательны за любые идеи или предложения по решению этой проблемы со ссылками!

Подробнее здесь: https://stackoverflow.com/questions/784 ... tom-header

Вернуться в «C++»