Ich schreibe eine Bibliothek in C99, und es gibt einige Teile der Bibliothek, die erheblich von der Verwendung eines Makros / Inline-Funktion profitieren würde. Inline-Funktionen sind eine bessere Passform für meine Bibliothek.
Ich möchte diese Inline-Funktionen jedoch ausdrücklich nicht nach außen hin sichtbar machen.
Alles scheint zu funktionieren, aber wenn ich mit der Bibliothek verknüpfe, um eine ausführbare Datei zu erstellen, erhalte ich den Fehler: "undefined reference to `na_impl_gfx__draw'"
Ich habe das Problem in einem minimalen Testfall reproduziert, der genau das tut, was ich tue:
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();
}
Jetzt kompilieren wir:
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
Es scheint, dass beim Kompilieren der Bibliothek die Inline-Funktion nicht in den Objektcode für die Funktion somefunc() in lib.h eingefügt wird
Warum?
Die Inline-Funktion ist von außen nicht sichtbar. Ich würde erwarten, dass, wenn die Bibliothek kompiliert wird, die Inline-Funktion in die Funktion eingefügt wird, genau wie das Makro ist (Nb. mit nur ein Makro dieser Code kompiliert Datei).
Was mache ich falsch? Oder ist dies eine Einschränkung der Inline-Funktionen?