Ваша программа пытается искать определение для
extern void Idle(void);
в скомпилированном файле библиотеки. Поскольку функция с модификатором inline определена в исходном файле, то, при компиляции, на каждое место, где была вызвана эта функция, будет подставлено ее тело, но (!) в границах только этого объектного файла, который собирается из данного исходного файла. В самом объектном файле функции нет (она служит лишь как способ инстанцирования кода, без сдвигов по стеку вызова), поэтому мы не можем взять ее адрес, чтобы другие объектные файлы могли ее импортировать. Есть лишь инструкции процессора, которые были подставлены для каждого вызова этой функции.
Если же перенести реализацию в заголовочный файл (который поставляется с нашей библиотекой), то любой вызывающий код, который включает этот заголовочный файл, будет иметь доступ к реализации. Поэтому у Вас все и заработало.