First explain the code structure: there are three source files, two dynamic library so sources: lib1.c and lib2.c, each exporting one library function (gcc exports by default, unlike Windows msvc which requires explicit dllexport), and one main program source: main.c, which calls the exported functions of the two dynamic libraries, as follows:
lib1.c
#include <stdio.h>
void lib1_func(const char* from)
{
printf("lib1 func from %s\n", from);
}
lib2.c
#include <stdio.h>
void lib2_func(const char* from)
{
printf("lib2 func from %s\n", from);
}
main.c
#include <stdio.h>
void lib1_func(const char* from);
void lib2_func(const char* from);
int main()
{
printf("hello from main\n");
lib1_func("main");
lib2_func("main");
return 0;
}