Sowas würde ich per Linker lösen.
1 | // include/server_framework/plugin.h
|
2 | typedef void plugin_main_f(void);
|
3 | extern plugin_main_f plugin_main;
|
1 | // src/plugin/a/main.c
|
2 | #include <stdio.h>
|
3 | #include <server_framework/plugin.h>
|
4 | void plugin_main(void){ printf("Plugin A\n"); }
|
1 | // src/plugin/b/main.c
|
2 | #include <stdio.h>
|
3 | #include <server_framework/plugin.h>
|
4 | void plugin_main(void){ printf("Plugin B\n"); }
|
1 | // src/server_framework/main.c
|
2 | #include <server_framework/plugin.h>
|
3 | int main(){ plugin_main(); }
|
1 | cc -I include/ src/server_framework/main.c -c -o server_framework_main.o
|
2 | cc -I include/ src/plugin/a/main.c -c -o plugin_a.o
|
3 | cc -I include/ src/plugin/b/main.c -c -o plugin_b.o
|
4 | cc server_framework_main.o plugin_a.o -o plugin_a
|
5 | cc server_framework_main.o plugin_b.o -o plugin_b
|
src/server_framework/* kann man natürlich auch in eine Library packen,
statisch oder dynamisch geht beides. (Zumindest unter Linux, unter
Windows geht vermutlich nur statisch, wenn da die main drin ist).
1 | mkdir lib
|
2 | cc -fPIC -I include/ src/server_framework/main.c -c -o server_framework_main.o # -fPIC brauchts nur für shared libs
|
3 | ar r lib/libserver_framework.a server_framework_main.o # Statische lib
|
4 | cc -shared lib/libserver_framework.a -o lib/libserver_framework.so # Optional, dynamische lib
|
5 |
|
6 | cc -Llib plugin_a.o -o plugin_a -lserver_framework
|
7 | cc -Llib plugin_b.o -o plugin_b -lserver_framework
|
8 |
|
9 | // LD_LIBRARY_PATH falls dynamische Library verwendet wird. Alternativ, in /usr/local/lib installieren und ldconfig aufrufen
|
10 | LD_LIBRARY_PATH=$PWD/lib/ ./plugin_a
|
(Unter Windows kann man nicht das selbe Archiv für die Statische lib und
die DLL nehmen, dort braucht man für die .o / .obj schon andere
Optionen)
Muss man halt einmal ein Makefile dafür erstellen.
PS: Ich nehme gerne -Wl,--whole-archive libserver_framework.a
-Wl,--no-whole-archive damit keine undefinierten oder doppelten Symbole
wegen Linkerreihenfolge rumschwirren