В настоящее время я пишу библиотечное приложение для моего Teensy, используя Arduino IDE, и до сих пор это было достаточно просто сделать. Однако я столкнулся с некоторой странной ошибкой компиляции, которую я просто не могу понять. Моя библиотека включает в себя хорошо известную библиотеку IRRemote для того, чтобы я мог создать библиотеку-оболочку, чтобы быть более точным в том, как мне нужно взаимодействовать с библиотекой IR Remote. У меня проблема с одной из функций библиотеки IR Remote:
void sendRaw(const unsigned int buf[],unsigned int len, unsigned int);
Хотя это может показаться простой функцией для использования, у меня возникла проблема с первым аргументом функции. Я перепробовал все различные способы передачи чего-либо этому параметру функции, но что бы я ни делал, он просто не скомпилируется. В настоящее время я установил переменную
unsigned int bufferToSend[5] = {1,2,3,4,5}; // data is just for example purposes
когда я пытаюсь позвонить
sendRaw(bufferToSend, 5, 38); // Values are just for example purposes
я получаю ошибку компилятора
undefined reference to `IRsend::sendRaw(unsigned int const*, unsigned int, unsigned int)'
Интересно, что если я вызываю ту же функцию непосредственно из файла Arduino .ino, а не через мой библиотечный вызов, код компилируется и работает отлично. Я что-то упускаю явно очевидное?
С помощью «Некоторого программиста, чувак» я смог решить эту проблему. Как было совершенно справедливо указано, я не связывался с внешней библиотекой из своей библиотеки. Работая со связыванием библиотек ранее, я знаю, что это абсолютно фундаментально, однако, с Arduino и его природой, он собирает библиотеки, которые связаны с «на ходу», когда вы включаете из скрипта Arduino, и поэтому я стал жертвой мысли об этом будет то же самое в пользовательской библиотеке. Я наткнулся на очень хорошую рецензию на мою точную проблему ниже, которая дает отличное объяснение некоторой магии Arduino «дым и зеркала» и как обойти проблему, с которой я столкнулся здесь.
Advanced Arduino — Включение нескольких библиотек в ваш проект
Других решений пока нет …