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