Я пишу библиотеку на C99, и есть некоторые части библиотеки, которые значительно выиграли бы от использования макро / встроенной функции. Встроенные функции лучше подходят для моей библиотеки.
Тем не менее, я не хочу, чтобы эти внешние функции были доступны извне.
Кажется, что все работает, но когда я связываюсь с библиотекой для создания исполняемого файла, я получаю ошибку: «неопределенная ссылка на« na_impl_gfx__draw »»
Я воспроизвел проблему в минимальном тестовом примере, который делает именно то, что я делаю:
lib.h:
void somefunc();
lib.c:
#include <stdio.h>
#include "lib.h"
inline void someinline(char *value);
void somefunc() {
someinline("Hi!");
}
inline void someinline(char *value) {
printf("%s\n", value);
}
main.c:
#include "lib.h"
int main(int argc, char *argv[]) {
somefunc();
}
Теперь мы скомпилируем:
doug@Wulf:~/test$ gcc -c -std=c99 lib.c
doug@Wulf:~/test$ gcc -c -std=c99 main.c
doug@Wulf:~/test$ gcc -std=c99 lib.o main.o
lib.o: In function `somefunc':
lib.c:(.text+0xe): undefined reference to `someinline'
lib.c:(.text+0x1a): undefined reference to `someinline'
lib.c:(.text+0x26): undefined reference to `someinline'
collect2: ld returned 1 exit status
Может показаться, что при компиляции библиотеки встроенная функция не подставляется в объектный код для функции somefunc () в lib.h
Почему?
Встроенная функция не видна снаружи. Я ожидаю, что когда библиотека скомпилирована, встроенная функция встроена в функцию, точно так же, как макрос (Примечание: используя только макрос, этот код компилирует файл).
Что я делаю не так? Или это ограничение встроенных функций?