Вы пишете, что функция у вас определена в заголовочном файле — вы имеете в виду, что весь код функции там или только объявление (то есть она
объявлена, а не определена)? Мне кажется, только объявлена, иначе у вас, скорее всего, были бы дублирующиеся символы при линковке.
Вообще же
extern inline функция (возможно) будет развернута в
inline в той единице компиляции, где она определена, и из получившегося объекта будет торчать одноименный символ. Все остальные единицы компиляции будут использовать ее как обычную
extern функцию. На SO есть
небольшое обсуждение.
Если вы хотите развернуть ее во всех единицах компиляции, то можно, по примеру С++, описать функцию полностью в заголовочном файле как
static inline плюс добавить не-
static обертку для экспорта. (Или перед компиляцией слить все файлы в один — наверное, так будет даже проще.)